我使用Apache和检索我的组的脚本设置了gitolite。 我可以有效地控制谁可以进入存储库,但不能谁可以阅读。目前,如果我没有在存储库中设置R = @all规则,则没有人可以读取它,即使是与其他规则匹配的人。
我有以下gitolite配置:
repo testing
R = @git-reader-test
R = olivier
# R = @all #Will work if I uncomment this line
RW+ = @developers
我的wapper脚本调用gitolite有以下代码
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
你知道为什么会这样吗?
答案 0 :(得分:3)
奇怪的是,帮助你的不是“R = gitweb”,而是“R =守护进程”。是的,即使你正在使用apache,这似乎......“webbie”。
尝试'man git-http-backend'并寻找'git-daemon-export-ok'。
gitolite文档不说你需要这样做,但建议的配置包括
SetEnv GIT_HTTP_EXPORT_ALL
,再次根据'man git-http-backend',是在每个仓库中要求export-ok文件的替代方案。据推测,无论出于何种原因,你都没有选择设置它。
这些都与gitolite没有任何关系,真的。如果没有gitolite你仍然会遇到同样的问题 - 某人必须创建那些export-ok文件(或者你必须设置GIT_HTTP_EXPORT_ALL env var)
sitaram
答案 1 :(得分:2)
正如VonC指出的那样,至少gitweb需要能够读取存储库。所以我可以通过添加:
来解决这个问题repo @all
R = gitweb daemon
到我的存储库配置,给定(没有任何详细信息)in gitolite documentation。
直到现在我才真正想到,gitweb与gitolite真的是分开的,它只是用来拥有一个用于回购浏览的网页界面,但我一定错过了一些gitolite文档。
恕我直言,自从我在询问之前多次阅读以来没有很好地强调链接文档,并且没有任何地方说没有gitweb作为读者会阻止每个人阅读回购。
编辑:请参阅Sitaram的解释。