セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット取得
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
- 2.44.1 → 2.49.0 変更なし
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.6 変更なし
-
2.43.0
2023-11-20
- 2.37.3 → 2.42.4 変更なし
-
2.37.2
2022-08-11
- 2.22.1 → 2.37.1 変更なし
-
2.22.0
2019-06-07
- 2.17.1 → 2.21.4 変更なし
-
2.17.0
2018-04-02
- 2.10.5 → 2.16.6 変更なし
-
2.9.5
2017-07-30
- 2.2.3 → 2.8.6 変更なし
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
書式
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>は以下のいずれかである必要があります。
`--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]スイートの一部