日本語 ▾ トピック ▾ 最新バージョン ▾ git-daemon は 2.50.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 fetchgit pullgit cloneから呼び出されるgit fetch-packgit ls-remoteクライアントにサービスを提供します。

これは、Gitリポジトリからのプルなど、読み取り専用の更新に最適です。

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

オプション

--strict-paths

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

--base-path=<path>

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

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

リクエストで~ユーザー表記の使用を許可します。パラメータなしで指定した場合、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を切り替えるプログラムと同様に、デーモンはgitプログラム(例:upload-packreceive-pack)を実行するときにHOMEなどの環境変数をリセットしません。このオプションを使用する場合、デーモンを起動する前にHOME<user>のホームディレクトリを指すように設定およびエクスポートし、そのディレクトリ内のGit設定ファイルが<user>によって読み取り可能であることを確認することもできます。

--enable=<service>
--disable=<service>

デフォルトでサービスをサイト全体で有効/無効にします。サイト全体で無効になっているサービスでも、上書き可能としてマークされており、リポジトリが設定項目でサービスを有効にしている場合は、リポジトリごとに有効にできることに注意してください。

--allow-override=<service>
--forbid-override=<service>

リポジトリごとの設定でサイト全体のデフォルトを上書きすることを許可/禁止します。デフォルトでは、すべてのサービスが上書き可能です。

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

/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
仮想ホスト用のinetdサーバーとしてのgit daemon

www.example.comwww.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アドレスに対応していると仮定すれば、ホスト名でもアクセスできます。

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

リポジトリに対してgit archive --remoteを有効にし、git fetchを無効にするには、リポジトリ内の設定ファイル(つまり、HEADrefsobjectsの隣にあるconfigファイル)に次の記述を含めます。

	[daemon]
		uploadpack = false
		uploadarch = true

環境変数

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

GIT

git[1]スイートの一部

scroll-to-top