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を伴ってgitdaemonを実行し、後でgit://example.com/hello.gitをプルしようと試みると、gitdaemonはパスを/srv/git/hello.gitとして解釈します。 -
--base-path-relaxed -
--base-pathが有効になっていて、リポジトリを探すのに失敗した場合、このオプションを使用すると、gitdaemonはベースパスを前に付けずに探索を試みます。 これは、古いパスを許可したまま、--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と一緒に使用するとエラーになります。 同じことを実現するには、必要に応じて、gitdaemonを生成する前に、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
-
これは、
gitfetch-packとgitls-remoteクライアントにサービスを提供します。デフォルトで有効になっていますが、リポジトリではdaemon.uploadpack構成アイテムをfalseに設定することで無効にできます。 - upload-archive
-
これは
gitarchive--remoteを提供します。 デフォルトでは無効になっていますが、リポジトリでは、daemon.uploadarch構成アイテムをtrueに設定することで有効にできます。 - receive-pack
-
これは
gitsend-packクライアントにサービスを提供し、匿名プッシュを可能にします。プロトコルに認証が「ない」ため、デフォルトでは無効になっています(つまり、参照の削除を含め、誰でもリポジトリに何でもプッシュできます)。これは、誰もが友好的であるクローズドLAN設定のみを対象としています。このサービスは、daemon.receivepack構成アイテムをtrueに設定することで有効にできます。
EXAMPLES
- ここでは /etc/services の下に構築するものと仮定します
-
$ grep 9418 /etc/services git 9418/tcp # Git Version Control System -
gitdaemonas 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 -
gitdaemonas 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から適切なデフォルトリポジトリへのシンボリックリンクも作成できます。 -
gitdaemonas 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
-
リポジトリに対して
gitarchive--remoteを有効にし、gitfetchを無効にするには、リポジトリの構成ファイルに以下のものを含めます(つまり、「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