我用 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
你知道为什么会这样吗?