使用gitosis管理对git存储库的http访问

时间:2010-09-15 22:21:27

标签: git gitosis githooks gitweb post-update

[2010年9月16日更新]

在调查了昨晚之后,我意识到我原来的问题实际上是在提出两件不同的事情:

1)是否可以为gitosis创建的所有远程存储库设置更新后挂钩(即在gitosis中创建存储库后不必手动执行mv hooks/post-update.sample hooks/post-update)这是通过HTTP克隆到工作(愚蠢的HTTP客户端依赖于在更新后的挂钩中调用git update-server-info的事实。)

2)一旦可以通过HTTP访问存储库,是否可以使用gitosis.conf中的选项打开和关闭访问权限(类似于daemon = nogitweb = 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 = nogitweb = no会关闭存储库的git-daemon和gitweb访问权限,但由于Apache重写规则仍然存在, repo仍然可以克隆 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访问?

1 个答案:

答案 0 :(得分:1)

gitweb已经安装好了吗?检查this blog以获取有关如何使用gitweb设置gitosis的说明。

顺便说一下,Gitolite的主要特点是你可以拥有非常好的权限。即。每个分支的控制权限。


更新:我认为gitosis整合w / gitweb基本上是否出现在项目列表中。它不控制gitweb的权限;这是通过Web服务器(apache)完成的。