【问题标题】:testing/info/refs not found in gitolite after removing R @all rule删除 R @all 规则后在 gitolite 中找不到测试/信息/参考
【发布时间】:2012-12-31 18:06:35
【问题描述】:

我用 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

你知道为什么会这样吗?

【问题讨论】:

标签: git gitolite


【解决方案1】:

奇怪的是,帮助你的不是“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)

西塔拉姆

【讨论】:

  • 感谢您提供的信息,我现在一切都清楚了。我有 SetEnv GIT_HTTP_EXPORT_ALL 但由于我执行了 gitolite 包装脚本,因此没有转发。我认为man git-http-backend 或你写的最后一段将是有价值的信息,可以添加到sitaramc.github.com/gitolite/external.html 的 git-deamon 部分。
  • 伟大的补充。 +1。我同意 jolivier 的观点:文档可以从有关如何允许使用 gitweb 浏览 repo 的更多细节中受益。 (而且我从最近的经验中知道,指向这个 Stack Overflow 答案的链接是不可接受的 plus.google.com/u/0/115609618223925128756/posts/VjewXCzfXgq ;))
【解决方案2】:

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

repo @all
    R       =   gitweb daemon

到我的存储库配置,如给定(没有任何细节)in gitolite documentation

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

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

编辑:请参阅 Sitaram 的答案以获取解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 2015-11-12
    • 2015-08-31
    相关资源
    最近更新 更多