日本語 ▾ トピック ▾ 最新バージョン ▾ git-daemonは2.44.0で最終更新されました

名前

git-daemon - Gitリポジトリ用の非常にシンプルなサーバー

書式

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>…​]

説明

通常「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リポジトリからのプルに理想的です。

`upload-archive` も *git archive* のサービスを提供するために存在します。

オプション

--strict-paths

パスを厳密に一致させ(つまり、実際のパスが「/foo/repo.git」または「/foo/repo/.git」の場合に「/foo/repo」を許可しない)、ユーザー相対パスを使用しません。このオプションが有効でディレクトリ引数が指定されていない場合、*git daemon* は起動を拒否します。

--base-path=<path>

すべてのパス要求を指定されたパスに対する相対パスとして再マッピングします。これは「Gitルート」のようなものです。例えばexample.comで*git daemon*を*--base-path=/srv/git*で実行した場合、後で*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リポジトリのように見えるすべてのディレクトリ(*objects*および*refs*サブディレクトリを持つもの)からプルすることを許可します。*git-daemon-export-ok*ファイルがない場合でも許可されます。

--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>

特定のクライアントサブ要求に対するタイムアウト(秒単位)。これには、サーバーがサブ要求を処理するのにかかる時間と、次のクライアント要求を待つ時間が含まれます。

--max-connections=<n>

同時接続クライアントの最大数。デフォルトは32です。制限なしにするには0を設定します。

--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

情報提供エラーが有効になっている場合、git-daemonは「そのようなリポジトリはありません」と「リポジトリがエクスポートされていません」のような条件を区別して、より詳細なエラーをクライアントに報告します。これはクライアントにとって便利ですが、エクスポートされていないリポジトリの存在に関する情報が漏洩する可能性があります。情報提供エラーが有効になっていない場合、すべてのエラーはクライアントに「アクセス拒否」を報告します。デフォルトは--no-informative-errorsです。

--access-hook=<path>

クライアントが接続するたびに、まず<path>で指定された外部コマンドを、サービス名(例: 「upload-pack」)、リポジトリへのパス、ホスト名(%H)、正規ホスト名(%CH)、IPアドレス(%IP)、TCPポート(%P)をコマンドライン引数として実行します。外部コマンドは、ゼロ以外のステータスで終了することでサービスを拒否するか(またはゼロのステータスで終了することで許可する)、を決定できます。また、この決定を行う際に、要求元に関する情報を得るために$REMOTE_ADDRおよび`$REMOTE_PORT`環境変数を参照することもできます。

外部コマンドはオプションで、サービスを拒否した場合にエラーメッセージとして要求元に送信される単一行を標準出力に書き込むことができます。

<directory>

残りの引数はディレクトリのリストを提供します。いずれかのディレクトリが指定されている場合、`git-daemon`プロセスは、要求されたディレクトリがこれらのディレクトリのいずれかに含まれている場合にのみサービスを提供します。`--strict-paths`が指定されている場合、要求されたディレクトリはこれらのディレクトリのいずれかに正確に一致する必要があります。

サービス

これらのサービスは、このコマンドのコマンドラインオプションを使用してグローバルに有効/無効にできます。よりきめ細かい制御が必要な場合(例: デーモンが提供する一部の選択されたリポジトリでのみ*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`に設定することで有効にできます。

/etc/services に以下を想定します
$ grep 9418 /etc/services
git		9418/tcp		# Git Version Control System
inetdサーバーとしての*git daemon*

*git daemon*を`/pub/foo`または`/pub/bar`内の任意のリポジトリを扱うinetdサービスとして設定するには、次のようなエントリを`/etc/inetd`にすべて1行で配置します。

	git stream tcp nowait nobody  /usr/bin/git
		git daemon --inetd --verbose --export-all
		/pub/foo /pub/bar
仮想ホスト用のinetdサーバーとしての*git daemon*

異なる仮想ホスト、`www.example.com`と`www.example.org`のリポジトリを扱うinetdサービスとして*git daemon*を設定するには、次のようなエントリを`/etc/inetd`にすべて1行で配置します。

	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*

複数の仮想ホストのリポジトリを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アドレスに対応していると仮定すれば、ホスト名でもアクセスできます。

リポジトリごとにサービスを選択的に有効/無効にする

リポジトリに対して*git archive --remote*を有効にし、*git fetch*を無効にするには、リポジトリ内の設定ファイル(つまり、`HEAD`、*refs*、*objects*の隣にある*config*ファイル)に以下を含めます。

	[daemon]
		uploadpack = false
		uploadarch = true

環境変数

*git daemon*は、接続元のクライアントのIPアドレスが利用可能であれば、REMOTE_ADDRをそのIPアドレスに設定します。サービス実行時に呼び出されるフックの環境にはREMOTE_ADDRが利用可能です。

Git

git[1]スイートの一部

scroll-to-top