SYNOPSIS
gitdaemon
[--verbose
] [--syslog
] [--export-all
] [--timeout=
<n>] [--init-timeout=
<n>] [--max-connections=
<n>] [--strict-paths
] [--base-path=
<path>] [--base-path-relaxed
] [--user-path
|--user-path=
<path>] [--interpolated-path=
<pathtemplate>] [--reuseaddr
] [--detach
] [--pid-file=
<file>] [--enable=
<service>] [--disable=
<service>] [--allow-override=
<service>] [--forbid-override=
<service>] [--access-hook=
<path>] [--
[no-
]informative-errors
] [--inetd
| [--listen=
<host-or-ipaddr>] [--port=
<n>] [--user=
<user> [--group=
<group>]]] [--log-destination=
(stderr
|syslog
|none
)] [<directory>…]
DESCRIPTION
通常はポート「DEFAULT_GIT_PORT」(9418)でリッスンする非常に単純なTCP Gitデーモン。サービスを要求する接続を待機し、有効になっている場合はそのサービスを提供します。
ディレクトリにマジックファイル git-daemon-export-ok
があることを確認し、この方法でエクスポートのマークが明示されていないGitディレクトリのエクスポートを拒否します(--export-all
パラメーターが指定されていない場合)。 いくつかのディレクトリ・パスを「git daemon」の引数として渡すと、提供するのはそれらのディレクトリ内のリポジトリに限定されます。
デフォルトでは、 upload-pack
サービスのみが有効になっており、 git
fetch
や git
pull
や git
clone
から呼び出される git
fetch-pack
と git
ls-remote
クライアントにサービスを提供します。
これは、読み取り専用の更新、つまりGitリポジトリからのプルに最適です。
git
archive
を提供するための upload-archive
もあります。
OPTIONS
-
--strict-paths
-
パスを正確に一致させ(つまり、 実際のパスが "/foo/repo.git" または "/foo/repo/.git" の場合は "/foo/repo" を許可しないでください)、 そしてユーザー相対パスを許可しないでください。 このオプションが有効で、かつ、ディレクトリ引数が指定されていない場合、「git daemon」は起動を拒否します。
-
--base-path=
<path> -
指定されたパスを基準にして、すべてのパス要求を再マップします。これは一種の "Git root" です。example.comで
--base-path=/srv/git
を伴ってgit
daemon
を実行し、後でgit://example.com/hello.git
をプルしようと試みると、git
daemon
はパスを/srv/git/hello.git
として解釈します。 -
--base-path-relaxed
-
--base-path
が有効になっていて、リポジトリを探すのに失敗した場合、このオプションを使用すると、git
daemon
はベースパスを前に付けずに探索を試みます。 これは、古いパスを許可したまま、--base-path
使用に切り替える場合に便利です。 -
--interpolated-path=
<pathtemplate> -
仮想ホスティングをサポートするために、補完されたパステンプレートを使用して、代替パスを動的に構築できます。テンプレートは、クライアントから提供されたターゲットホスト名の %H をサポートしますが、すべて小文字に変換されます。正規ホスト名の場合は %CH、サーバーのIPアドレスの場合は %IP、ポート番号の場合は %P、名前付きリポジトリの絶対パスの場合は %D です。補完後、パスはディレクトリのリストに対して検証されます。
-
--export-all
-
git-daemon-export-ok
ファイルがない場合でも、 (objects
とrefs
サブディレクトリがある、)Gitリポジトリのように見えるすべてのディレクトリからのプルを許可します。 -
--inetd
-
サーバーをinetdサービスとして実行します。
--syslog
の指定を含んでいます(--log-destination=
でオーバーライドされる場合があります)。--detach
、--port
、--listen
、--user
、--group
オプションとは互換性がありません。 -
--listen=
<host-or-ipaddr> -
特定のIPアドレスまたはホスト名でリッスンします。IPアドレスは、IPv4アドレス、または、サポートされている場合はIPv6アドレス、 のいずれかになります。 IPv6がサポートされてい無い場合、
--listen=
<hostname> もサポートされてい無いため、--listen
にはIPv4アドレスを指定する必要があります。 このオプションは複数回与えることができます。--inetd
オプションとは互換性がありません。 -
--port=
<n> -
代わりのポートでリッスンします。
--inetd
オプションと互換性がありません。 -
--init-timeout=
<n> -
接続が確立されてからクライアント要求が受信されるまでのタイムアウト(秒単位)(基本的には即時である必要があるため、通常はかなり低い値)。
-
--timeout=
<n> -
特定のクライアントサブリクエスト(client sub-requests)のタイムアウト(秒単位)。これには、サーバーがサブリクエストを処理するのにかかる時間と、次のクライアントのリクエストを待つために費やされる時間が含まれます。
-
--max-connections=
<n> -
同時クライアントの最大数。デフォルトは32です。制限しない場合はゼロに設定します。
-
--syslog
-
--log-destination=syslog
の短縮形。 -
--log-destination=
<destination> -
指定した宛先にログメッセージを送信します。 このオプションは
--verbose
を意味しないため、デフォルトではエラー状態のみがログに記録されることに注意してください。 <destination> は以下のいずれかである必要があります:- stderr
-
標準エラーに書き込みます。
--detach
が指定されている場合、プロセスは実際の標準エラーから切断され、この宛先は実質的にnone
と同等になることに注意してください。 - syslog
-
git-daemon
識別子を使用してsyslogに書き込みます。 - none
-
すべてのログを無効にします。
デフォルトの宛先は、
--inetd
または--detach
が指定されている場合、はsyslog
であり、それ以外の場合はstderr
です。 -
--user-path
-
--user-path=
<path> -
~user 表記をリクエストで使用できるようにします。パラメータなしで指定した場合、 git://host/~alice/foo へのリクエストは、 ユーザー
alice
のホーム・ディレクトリにあるfoo
リポジトリへのアクセス・リクエストと見なされます。--user-path=
<path> が指定されている場合、このリクエストは、ユーザーalice
のホーム・ディレクトリにある <path>/foo
リポジトリにアクセスするリクエストと見なされます。 -
--verbose
-
着信接続と要求されたファイルに関する詳細をログに記録します。
-
--reuseaddr
-
リスニングソケットをバインドするときは SO_REUSEADDR を使用します。 これにより、古い接続がタイムアウトするのを待たずにサーバーを再起動できます。
-
--detach
-
シェルからデタッチします。
--syslog
オプションの指定を含んでいます。 -
--pid-file=
<file> -
プロセスIDを <file> に保存します。デーモンが
--inetd
で実行されている場合は無視されます。 -
--user=
<user> -
--group=
<group> -
サービスループに入る前に、デーモンのuidとgidを変更します。
--group
なしで--user
のみが指定された場合、ユーザーのプライマリグループIDが使用されます。オプションの値はgetpwnam
(3
) とgetgrnam
(3
) に与えられ、数値IDはサポートされていません。これらのオプションを指定すると、
--inetd
と一緒に使用するとエラーになります。 同じことを実現するには、必要に応じて、git
daemon
を生成する前に、inetデーモンの機能を使用します。ユーザーIDを切り替える多くのプログラムと同様に、デーモンは、(例えば、
upload-pack
や`receive-pack` の) gitプログラムを実行するときに$HOME
などの環境変数をリセットしません。このオプションを使用する場合は、デーモンを起動する前に、HOME
を <user> のホームディレクトリを指すように設定、およびエクスポートし、そのディレクトリ内のGit構成ファイルが <user> によって読み取り可能であることを確認してください。 -
--enable=
<service> -
--disable=
<service> -
デフォルトでサイト全体のサービスを 有効/無効 にします。サイト全体で無効にされたサービスは、オーバーライド可能とマークされていて、リポジトリが構成アイテムでサービスを有効にしている場合でも、リポジトリごとに有効にできることに注意してください。
-
--allow-override=
<service> -
--forbid-override=
<service> -
リポジトリごとの構成でサイト全体のデフォルトをオーバーライドすることを 許可/禁止 します。デフォルトでは、すべてのサービスがオーバーライドされる場合があります。
-
--
[no-
]informative-errors
-
informative-errorsがオンになっている場合、git-daemonはより詳細なエラーをクライアントに報告し、「no such repository」(そのようなリポジトリがない)と「repository not exported」(リポジトリがエクスポートされていない)などの条件を区別します。これはクライアントにとってより便利ですが、エクスポートされていないリポジトリの存在に関する情報が漏洩する可能性があります。informative-errorsが有効になっていない場合、すべてのエラーは「access denied」とクライアントに報告します。 デフォルトは
--no-informative-errors
です。 -
--access-hook=
<path> -
クライアントが接続するたびに、最初に、<path> で指定された外部コマンドを実行します。コマンドライン引数として、サービス名("upload-pack"など)や、リポジトリへのパスや、ホスト名(%H)や、正規のホスト名(%CH)や、IPアドレス(%IP)や、TCPポート(%P)を、指定します。外部コマンドは、ゼロ以外のステータスで終了することによってサービスを拒否する(またはゼロ・ステータスで終了することによってサービスを許可する)ことを決定できます。また $REMOTE_ADDR や
$REMOTE_PORT
環境変数を調べて、この決定を行うときにリクエスト側(requestor)ついて調べることもできます。外部コマンドはオプションで、サービスを拒否したときにエラーメッセージとしてリクエスト側(requestor)に送信される1行を標準出力に書き込むことができます。
- <directory>
-
残りの引数は、ディレクトリのリストを提供します。 ディレクトリが指定されている場合、
git-daemon
プロセスは、 要求されたディレクトリがこれらのディレクトリのいずれかに含まれている場合にのみ、 リクエストされたディレクトリをサーブします。--strict-paths
が指定されている場合、リクエストされたディレクトリはこれらのディレクトリのいずれかと正確に一致する必要があります。
SERVICES
これらのサービスは、このコマンドのコマンドラインオプションを使用してグローバルに 有効/無効 にできます。よりきめ細かい制御が必要な場合(たとえば、デーモンがサービスを提供するいくつかの選択されたリポジトリでのみ git
archive
を実行できるようしたい時)、リポジトリごとの構成ファイルを使用して、それらを有効または無効にできます。
- upload-pack
-
これは、
git
fetch-pack
とgit
ls-remote
クライアントにサービスを提供します。デフォルトで有効になっていますが、リポジトリではdaemon.uploadpack
構成アイテムをfalse
に設定することで無効にできます。 - upload-archive
-
これは
git
archive
--remote
を提供します。 デフォルトでは無効になっていますが、リポジトリでは、daemon.uploadarch
構成アイテムをtrue
に設定することで有効にできます。 - receive-pack
-
これは
git
send-pack
クライアントにサービスを提供し、匿名プッシュを可能にします。プロトコルに認証が「ない」ため、デフォルトでは無効になっています(つまり、参照の削除を含め、誰でもリポジトリに何でもプッシュできます)。これは、誰もが友好的であるクローズドLAN設定のみを対象としています。このサービスは、daemon.receivepack
構成アイテムをtrue
に設定することで有効にできます。
EXAMPLES
- ここでは /etc/services の下に構築するものと仮定します
-
$ grep 9418 /etc/services git 9418/tcp # Git Version Control System
-
git
daemon
as inetd server -
/pub/foo
または/pub/bar
内の任意のリポジトリを処理する inetd サービスとして「git daemon」を設定するには、 以下のようなエントリを/etc/inetd
に、すべて 1 行で配置します:git stream tcp nowait nobody /usr/bin/git git daemon --inetd --verbose --export-all /pub/foo /pub/bar
-
git
daemon
as inetd server for virtual hosts -
異なる仮想ホスト
www.example.com
とwww.example.org
のリポジトリを処理するinetdサービスとして「git daemon」を設定するには、以下のようなエントリをすべて1行で/etc/inetd
に配置します:git stream tcp nowait nobody /usr/bin/git git daemon --inetd --verbose --export-all --interpolated-path=/pub/%H%D /pub/www.example.org/software /pub/www.example.com/software /software
この例では、ルートレベルのディレクトリ
/pub
には、サポートされている各仮想ホスト名のサブディレクトリが含まれています。さらに、両方のホストは、リポジトリを単にgit://www.example.com/software/repo.git
として公開します。 1.4.0より前のクライアントの場合、/software
から適切なデフォルトリポジトリへのシンボリックリンクも作成できます。 -
git
daemon
as regular daemon for virtual hosts -
IPアドレスに基づいて複数の仮想ホストのリポジトリを処理する通常の非inetdサービスとして「git daemon」を設定するには、以下のようにデーモンを起動します:
git daemon --verbose --export-all --interpolated-path=/pub/%IP/%D /pub/192.168.1.200/software /pub/10.10.220.23/software
この例では、 ルート・レベルのディレクトリ
/pub
には、 サポートされている各仮想ホストIPアドレスのサブディレクトリが含まれます。 ただし、 これらのホスト名がIPアドレスに対応しているならば、 ホスト名でリポジトリにアクセスできます。 - selectively enable/disable services per repository
-
リポジトリに対して
git
archive
--remote
を有効にし、git
fetch
を無効にするには、リポジトリの構成ファイルに以下のものを含めます(つまり、「HEAD」、「refs」、および「objects」の横にあるファイル「config」)。[daemon] uploadpack = false uploadarch = true
ENVIRONMENT
「git daemon」は、IPアドレスが使用可能な場合、REMOTE_ADDRをそれに接続したクライアントのIPアドレスに設定します。 REMOTE_ADDRは、サービスの実行時に呼び出されるフックの環境で使用できます。
GIT
Part of the git(1) suite