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规则,我将能够毫无问题地获取我的 repo。

我遇到的错误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”,这是在每个 repo 中要求 export-ok 文件的替代方法。大概您出于某种原因没有选择设置它。

这些都与 gitolite 无关,真的。如果 gitolite 不在那里,你仍然会遇到同样的问题——必须有人创建那些导出正常的文件(或者你必须设置 GIT_HTTP_EXPORT_ALL env var)

西塔拉姆

于 2012-12-23T15:37:08.400 回答
2

正如 VonC 所指出的,至少 gitweb 需要能够读取存储库。所以我可以通过添加来解决这个问题:

repo @all
    R       =   gitweb daemon

到我的存储库配置,如gitolite 文档中给出的(没有任何细节)。

到目前为止,我真的认为 gitweb 与 gitolite 真的是分开的,它只是用来有一个用于 repo 浏览的 web 界面,但我一定错过了 gitolite 文档中的一些内容。

恕我直言,它在链接文档中的压力不够大,因为我在询问之前多次阅读了它,而且没有任何地方说没有 gitweb 作为阅读器会阻止每个人阅读 repos

编辑:有关解释,请参阅 Sitaram 答案。

于 2012-10-11T16:08:54.033 回答