[2010 年 9 月 16 日更新]
昨晚看了这个之后,我意识到我最初的问题实际上是在问两个不同的问题:
1)是否可以为 gitosis 创建的所有远程存储库设置更新后挂钩(即mv hooks/post-update.sample hooks/post-update
在 gitosis 创建存储库后不必手动执行)这是通过 HTTP 克隆工作所必需的(愚蠢的 HTTP 客户端依赖于git update-server-info
从更新后挂钩中调用的事实)。
2)一旦可以通过 HTTP 访问存储库,是否可以使用 gitosis.conf 中的选项打开和关闭访问(类似于daemon = no
or gitweb = yes
)
--- 问题 1 的解答 ---
事实证明,Git 使用模板通过git init
命令创建新的存储库。通过mv hooks/post-update.sample hooks/post-update
在模板目录中执行,我的服务器上的所有未来调用git init
都将正确配置更新后挂钩。(在 OSX 上,模板目录是/opt/local/share/git-core/templates/
为那些关心的人准备的)
这个工作的另一个要求是打开 Apache 重写规则,以便存储库的 HTTP 克隆 URL 看起来像http//git.example.com/repo.git
我的重写规则/etc/apache2/extra/httpd-vhosts.conf
如下所示:
# turning on mod rewrite
RewriteEngine on
# make the front page an internal rewrite to the gitweb script
RewriteRule ^/$ /cgi-bin/gitweb.cgi [L,PT]
# make access for "dumb clients" work
RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI} [L,PT]
--- 仍在寻找问题 2 的解决方案...帮助!:) ---
现在 HTTP 克隆适用于我所有的存储库,我想知道是否有一种方法可以使用 gitosis 来管理 HTTP 访问控制。设置daemon = no
并gitweb = no
关闭存储库的 git-daemon 和 gitweb 访问,但由于 Apache 重写规则仍处于启用状态,因此存储库仍可在http://git.example.com/repo.git
. 关于如何使用 gitosis 来管理这个的任何想法?
[我最初发布的问题]
是否可以使用 gitosis 管理对 git 存储库的 http 访问?例如,在 gitosis.conf 中,我可以使用以下命令管理 gitweb 和 git-demon 的访问:
# Allow gitweb to show this repository.
gitweb = yes
# Allow git-daemon to publish this repository.
daemon = no
我目前可以通过发出以下命令来克隆我的存储库:
$ git clone git://git.example.com/repo.git
但是,当我发出以下命令时:
$ git clone http://git.example.com/repo.git
我收到以下错误消息:
fatal: http://git.example.com/repo.git/info/refs not found: did you run git update-server-info on the server?
但是,如果我登录到我的服务器并从 repo.git 中运行以下命令:
# From http://progit.org/book/ch4-5.html
$ cd project.git
$ mv hooks/post-update.sample hooks/post-update
$ chmod a+x hooks/post-update
$ git update-server-info
然后通过http克隆工作正常。
有没有办法从 gitosis 中管理对存储库的 http 访问?