SYNOPSIS

git daemon [--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 fetchgit pullgit clone から呼び出される git fetch-packgit 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 ファイルがない場合でも、 (objectsrefs サブディレクトリがある、)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 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-packgit 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.comwww.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

IPアドレスに基づいて複数の仮想ホストのリポジトリを処理する通常の非inetdサービスとして「git daemon」を設定するには、以下のようにデーモンを起動します。

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