セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
- 2.49.1 → 2.50.1 変更なし
- 
        2.49.0
          
            
                                 2025-03-14 2025-03-14
- 2.43.1 → 2.48.2 変更なし
- 
        2.43.0
          
            
                                 2023-11-20 2023-11-20
- 2.34.1 → 2.42.4 変更なし
- 
        2.34.0
          
            
                                     2021-11-15 2021-11-15
- 2.22.1 → 2.33.8 変更なし
- 
        2.22.0
          
            
                             2019-06-07 2019-06-07
- 2.10.5 → 2.21.4 変更なし
- 
        2.9.5
          
            
                                 2017-07-30 2017-07-30
- 2.5.6 → 2.8.6 変更なし
- 
        2.4.12
          
            
                                 2017-05-05 2017-05-05
- 2.1.4 → 2.3.10 変更なし
- 
        2.0.5
          
            
                                     2014-12-17 2014-12-17
説明
http://およびhttps://プロトコル経由でリポジトリにアクセスするGitクライアントにGitリポジトリの内容を提供するシンプルなCGIプログラムです。このプログラムは、スマートHTTPプロトコルと下位互換性のあるダンプHTTPプロトコルの両方を使用したクライアントのフェッチ、およびスマートHTTPプロトコルを使用したクライアントのプッシュをサポートしています。また、適切に設定されている場合は、Gitのより効率的な「v2」プロトコルもサポートしています。詳細については、以下のENVIRONMENTセクションのGIT_PROTOCOLの議論を参照してください。
このプログラムは、ディレクトリにマジックファイル「git-daemon-export-ok」が存在するかどうかを確認し、この方法で明示的にエクスポートが許可されていないGitディレクトリのエクスポートを拒否します(GIT_HTTP_EXPORT_ALL環境変数が設定されている場合を除く)。
デフォルトでは、upload-packサービスのみが有効になっています。これは、git fetch、git pull、およびgit cloneから呼び出されるgit fetch-packおよびgit ls-remoteクライアントにサービスを提供します。クライアントが認証されている場合、receive-packサービスが有効になり、git pushから呼び出されるgit send-packクライアントにサービスを提供します。
サービス
これらのサービスは、リポジトリごとの設定ファイルを使用して有効/無効にできます。
- http.getanyfile
- 
これは、アップロードパックサービスを使用できないバージョン1.6.6より古いGitクライアントにサービスを提供します。有効にすると、クライアントはリポジトリ内の任意のファイルを読み取ることができます。これには、ブランチから到達できなくなったがまだ存在するオブジェクトも含まれます。デフォルトでは有効になっていますが、リポジトリは、この設定値を falseに設定することで無効にできます。
- http.uploadpack
- 
これは、git fetch-packおよびgit ls-remoteクライアントにサービスを提供します。デフォルトでは有効になっていますが、リポジトリは、この設定値を falseに設定することで無効にできます。
- http.receivepack
- 
これは、プッシュを許可するgit send-packクライアントにサービスを提供します。匿名ユーザーに対してはデフォルトで無効になっていますが、Webサーバーによって認証されたユーザーに対してはデフォルトで有効になっています。この項目を falseに設定すると無効にでき、trueに設定すると匿名ユーザーを含むすべてのユーザーに対して有効にできます。
- http.uploadarchive
- 
これは、HTTP/HTTPSプロトコルを介したリモートアーカイブのためにgit archiveクライアントにサービスを提供します。デフォルトでは無効になっています。プロトコルv2でのみ動作します。 
URL変換
ディスク上のリポジトリの場所を特定するために、git http-backendは、Webサーバーによって自動的に設定される環境変数PATH_INFOと、Webサーバー設定で手動で設定する必要があるGIT_PROJECT_ROOTを連結します。GIT_PROJECT_ROOTが設定されていない場合、git http-backendは、Webサーバーによって自動的に設定されるPATH_TRANSLATEDを読み取ります。
例
以下のすべての例では、http://$hostname/git/foo/bar.gitを/var/www/git/foo/bar.gitにマップしています。
- Apache 2.x
- 
mod_cgi、mod_alias、およびmod_envが有効になっていることを確認し、GIT_PROJECT_ROOT(またはDocumentRoot)を適切に設定し、CGIへのScriptAliasを作成します。 SetEnv GIT_PROJECT_ROOT /var/www/git SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/ # This is not strictly necessary using Apache and a modern version of # git-http-backend, as the webserver will pass along the header in the # environment as HTTP_GIT_PROTOCOL, and http-backend will copy that into # GIT_PROTOCOL. But you may need this line (or something similar if you # are using a different webserver), or if you want to support older Git # versions that did not do that copying. # # Having the webserver set up GIT_PROTOCOL is perfectly fine even with # modern versions (and will take precedence over HTTP_GIT_PROTOCOL, # which means it can be used to override the client's request). SetEnvIf Git-Protocol ".*" GIT_PROTOCOL=$0 匿名読み取りアクセスと認証済み書き込みアクセスを有効にするには、初期リファレンス広告(クエリ文字列のサービスパラメータを介してプッシュとして検出されます)とreceive-pack呼び出し自体の両方で認証を要求します。 RewriteCond %{QUERY_STRING} service=git-receive-pack [OR] RewriteCond %{REQUEST_URI} /git-receive-pack$ RewriteRule ^/git/ - [E=AUTHREQUIRED:yes] <LocationMatch "^/git/"> Order Deny,Allow Deny from env=AUTHREQUIRED AuthType Basic AuthName "Git Access" Require group committers Satisfy Any ... </LocationMatch>クエリ文字列と一致する mod_rewriteが利用できない場合、次のようにgit-receive-pack自体を保護するだけで十分です。<LocationMatch "^/git/.*/git-receive-pack$"> AuthType Basic AuthName "Git Access" Require group committers ... </LocationMatch> このモードでは、サーバーは最初の接触時ではなく、クライアントが実際にプッシュのオブジェクトネゴシエーションフェーズを開始するまで認証を要求しません。このため、プッシュを受け入れるべきすべてのリポジトリで http.receivepack設定オプションも有効にする必要があります。http.receivepackが設定されていない場合のデフォルトの動作は、認証されていないユーザーによるすべてのプッシュを拒否することです。したがって、初期リクエストは、認証の機会を与えることなく、クライアントに403Forbiddenを報告します。読み書きの両方に認証を要求するには、リポジトリまたはその親ディレクトリの周りにLocationディレクティブを使用します。 <Location /git/private> AuthType Basic AuthName "Private Git Access" Require group committers ... </Location> 同じURLでgitwebを提供するには、git http-backendが処理できるURLのみにScriptAliasMatchを使用し、残りをgitwebに転送します。 ScriptAliasMatch \ "(?x)^/git/(.*/(HEAD | \ info/refs | \ objects/(info/[^/]+ | \ [0-9a-f]{2}/[0-9a-f]{38} | \ pack/pack-[0-9a-f]{40}\.(pack|idx)) | \ git-(upload|receive)-pack))$" \ /usr/libexec/git-core/git-http-backend/$1 ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/単一のリポジトリで異なるgitnamespaces[7]から複数のリポジトリを提供する SetEnvIf Request_URI "^/git/([^/]*)" GIT_NAMESPACE=$1 ScriptAliasMatch ^/git/[^/]*(.*) /usr/libexec/git-core/git-http-backend/storage.git$1 
- 高速化された静的Apache 2.x
- 
上記と同様ですが、Apacheを使用してディスクに保存されている静的ファイルを返すことができます。多くのシステムでは、Apacheがカーネルにファイルシステムからネットワークにファイルの内容を直接コピーするように要求できるため、これはより効率的である可能性があります。 SetEnv GIT_PROJECT_ROOT /var/www/git AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1 AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1 ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/これはgitwebの設定と組み合わせることができます。 SetEnv GIT_PROJECT_ROOT /var/www/git AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1 AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1 ScriptAliasMatch \ "(?x)^/git/(.*/(HEAD | \ info/refs | \ objects/info/[^/]+ | \ git-(upload|receive)-pack))$" \ /usr/libexec/git-core/git-http-backend/$1 ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/
- Lighttpd
- 
mod_cgi、mod_alias、mod_auth、mod_setenvがロードされていることを確認し、GIT_PROJECT_ROOTを適切に設定して、すべてのリクエストをCGIにリダイレクトします。alias.url += ( "/git" => "/usr/lib/git-core/git-http-backend" ) $HTTP["url"] =~ "^/git" { cgi.assign = ("" => "") setenv.add-environment = ( "GIT_PROJECT_ROOT" => "/var/www/git", "GIT_HTTP_EXPORT_ALL" => "" ) }匿名読み取りアクセスを有効にし、認証済み書き込みアクセスを有効にするには $HTTP["querystring"] =~ "service=git-receive-pack" { include "git-auth.conf" } $HTTP["url"] =~ "^/git/.*/git-receive-pack$" { include "git-auth.conf" }ここで git-auth.confは次のようになります。auth.require = ( "/" => ( "method" => "basic", "realm" => "Git Access", "require" => "valid-user" ) ) # ...and set up auth.backend here 読み書きの両方に認証を要求するには $HTTP["url"] =~ "^/git/private" { include "git-auth.conf" }
環境変数
git http-backendは、呼び出し元のWebサーバーによって設定されるCGI環境変数に依存しています。これには以下が含まれます。
- 
PATH_INFO (GIT_PROJECT_ROOTが設定されている場合、それ以外の場合はPATH_TRANSLATED) 
- 
REMOTE_USER 
- 
REMOTE_ADDR 
- 
CONTENT_TYPE 
- 
QUERY_STRING 
- 
REQUEST_METHOD 
GIT_HTTP_EXPORT_ALL環境変数をgit-http-backendに渡すことで、各リポジトリの「git-daemon-export-ok」ファイルのチェックをバイパスし、そのリポジトリのエクスポートを許可することができます。
GIT_HTTP_MAX_REQUEST_BUFFER環境変数(またはhttp.maxRequestBuffer設定オプション)を設定することで、gitがフェッチ中に処理する最大の参照ネゴシエーション要求を変更できます。より大きなバッファを必要とするフェッチは成功しません。この値は通常変更する必要はありませんが、非常に多数の参照を持つリポジトリからフェッチしている場合に役立つことがあります。値は単位付きで指定できます(例: 100メガバイトの場合は100M)。デフォルトは10メガバイトです。
クライアントは、Git-Protocol HTTPヘッダーを使用して、オプションのプロトコル機能(v2プロトコルなど)をプローブすることができます。これらをサポートするには、そのヘッダーの内容がGIT_PROTOCOL環境変数に表示される必要があります。ほとんどのWebサーバーは、このヘッダーをHTTP_GIT_PROTOCOL変数を介してCGIに渡し、git-http-backendはそれを自動的にGIT_PROTOCOLにコピーします。ただし、一部のWebサーバーは、渡すヘッダーについてより選択的である場合があり、その場合は明示的に設定する必要があります(以前のEXAMPLESセクションのApache設定におけるGit-Protocolの記述を参照)。
バックエンドプロセスは、GIT_COMMITTER_NAMEを$REMOTE_USERに、GIT_COMMITTER_EMAILを${REMOTE_USER}@http.${REMOTE_ADDR}に設定し、git-receive-packによって作成されるリファレンスログに、プッシュを実行したリモートユーザーの識別情報が含まれるようにします。
すべてのCGI環境変数は、git-receive-packによって呼び出される各フックで利用可能です。
GIT
git[1]スイートの一部

