7

私だけがプッシュできる「スマート」HTTP経由でgitリポジトリを利用できるようにしたいのですが、誰でも(またはアカウントを持っている人なら誰でも)クローン/フェッチできます。

git-http-backend(1)マンページには、次の Apache Web サーバーの設定例があります。

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/

匿名の読み取りアクセスと認証済みの書き込みアクセスを有効にするには、LocationMatch ディレクティブによる承認が必要です。

<LocationMatch "^/git/.*/git-receive-pack$">
        AuthType Basic
        AuthName "Git Access"
        Require group committers
        #...
</LocationMatch>

残念ながら、この構成は機能しません。認証を必要とせずに、問題なくリポジトリをフェッチ/クローンできますが、プッシュは失敗します:

$ git push origin master
error: Cannot access URL http://localhost/git/test.git/, return code 22
fatal: git-http-push failed

Apache Web サーバーを調べerror.logても役に立ちません。

[...] サービスが有効になっていません: 'receive-pack'
[...] リクエストはサポートされていません: '/var/www/git/test.git/'

は、最初にクエリベースの URL でGET メソッドを使用するaccess.logことを示していますが、これは LocationMatch ディレクティブではカバーされていません。git push/git/test.git/info/refs?service=git-receive-pack

[...] "GET /git/test.git/info/refs?service=git-receive-pack HTTP/1.1" 403 304 "-" "git/1.7.10.4"
[...] "GET /git/test.git/info/refs HTTP/1.1" 200 267 "-" "git/1.7.10.4"
[...] "GET /git/test.git/HEAD HTTP/1.1" 200 337 "-" "git/1.7.10.4"
[...] "PROPFIND /git/test.git/ HTTP/1.1" 404 250 "-" "git/1.7.10.4"

(次の行は、「ダム」WebDAV ベースの HTTP プッシュへのフォールバックに関するものです。このフォールバックを無効にすることは可能ですか?)。


今のところ、次の回避策を使用します。フェッチとプッシュの両方に有効なユーザーを必要とし ( git-http-backend(1)マンページの「読み取りと書き込みの両方の認証」の例から変更された構成を使用)、プッシュを単一のユーザーに制限します環境変数を調べてpre-receive フックします。REMOTE_USER

4

2 に答える 2

1

それほど複雑ではない代替手段の 1 つは、Apache-git セットアップに加えてgitoliteを使用することです。
gitolite を Apache に簡単にプラグインできます (ssh 設定は不要です)。

例として参照してください: httpd.confを、このローカルgitolite インストール スクリプトと組み合わせます。

@allその後、書き込みアクセスと読み取りアクセスの Apache ログインを簡単に宣言できます。

于 2012-12-10T07:08:53.317 に答える
1

.git/config次の値でリポジトリ ファイルを更新する必要があります。

[http]
    receivepack = true
于 2016-08-22T17:34:24.977 に答える