1

Apache とグループを取得するスクリプトで gitolite をうまくセットアップしました。誰がリポジトリにプッシュできるかを効果的に制御できますが、誰が読み取ることができるかは制御できません。現在、リポジトリに R = @all ルールを設定しないと、他のルールに一致した人であっても、誰もそれを読み取ることができません。

次の gitolite 構成があります。

repo testing
    R       = @git-reader-test
    R       = olivier
#    R      =   @all #Will work if I uncomment this line
    RW+     =   @developers

gitolite を呼び出す私の wapper スクリプトには、次のコードがあります。

echo "Entering gitolite wrapper" >> /home/dev_tools/git/gitauth.log
echo "user: $REMOTE_USER" >> /home/dev_tools/git/gitauth.log
echo "groups: $HTTP_REMOTE_USER_GROUPS" >> /home/dev_tools/git/gitauth.log
exec /home/dev_tools/git/bin/gitolite-shell $REMOTE_USER 2>&1 |tee -a /home/dev_tools/git/gitauth.log

どの出力:

Entering gitolite wrapper
user: olivier
groups: developers ...
Status: 404 Not Found
Expires: Fri, 01 Jan 1980 00:00:00 GMT
Pragma: no-cache
Cache-Control: no-cache, max-age=0, must-revalidate

Repository not exported: '/home/dev_tools/git/repositories/testing'

したがって、私のグループとユーザー名でさえ R ルールに一致しますが、404 エラーで拒否されますが、R = @allルールのコメントを外せば問題なくリポジトリを取得できます。

私が得るエラーgit fetch

fatal: http://olivier@myserver/testing/info/refs not found: did you run git update-server-info on the server?

対応する gitolite ログは次のとおりです。

2012-10-11.15:52:10 26728       access(testing, olivier, R, 'any'),-> refs/.*
2012-10-11.15:52:10 26728       trigger,Writable,access_1,ACCESS_1,testing,olivier,R,any,refs/.*
2012-10-11.15:52:10 26728   pre_git testing olivier R   any -> refs/.*
2012-10-11.15:52:10 26728       system,git,http-backend
2012-10-11.15:52:10 26728   END

なぜこれが起こるのか分かりますか?

4

2 に答える 2

3

不思議なことに、あなたを助けたのは「R = gitweb」ではなく、「R = daemon」です。はい、Apache を使用していますが、これは "webbie" のようです。

「man git-http-backend」を試して、「git-daemon-export-ok」を探してください。

gitolite のドキュメントには、これを行う必要があるとは書かれていませんが、推奨される構成には以下が含まれます。

SetEnv GIT_HTTP_EXPORT_ALL

これは、再び「man git-http-backend」によると、すべてのリポジトリで export-ok ファイルを要求する代わりの方法です。おそらく、何らかの理由でそれを設定することを選択しなかったでしょう。

これはギトライトとは何の関係もありません。gitolite がそこになかった場合でも、同じ問題が発生します。誰かが export-ok ファイルを作成する必要があります (または、GIT_HTTP_EXPORT_ALL 環境変数を設定する必要があります)。

シタラム

于 2012-12-23T15:37:08.400 に答える
2

VonC が指摘したように、少なくとも gitweb はリポジトリを読み取れる必要があります。したがって、次を追加することでこれを修正できます。

repo @all
    R       =   gitweb daemon

gitolite documentation で(詳細なしで)指定されているように、私のリポジトリ構成に。

今まで、gitweb は本当に gitolite とは別のものであり、レポを閲覧するための Web インターフェイスを持っているだけだと思っていましたが、gitolite のドキュメントで何かを見落としていたに違いありません。

私見は、質問する前に何度も読んだので、リンクされたドキュメントで十分に強調されていません.

編集:説明については、Sitaramの回答を参照してください。

于 2012-10-11T16:08:54.033 に答える