[Update 9/16/2010]
After looking into this last night, I realized that my original question was really asking 2 separate things:
1) Is it possible to set the post-update hook for all remote repositories created by gitosis (i.e. not have to manually perform mv hooks/post-update.sample hooks/post-update
for after creating a repository in gitosis) This is necessary for cloning via HTTP to work (dumb HTTP clients rely on the fact that git update-server-info
is called from within the post-update hook).
2) Once the repository is accessible via HTTP, is it possible to turn access on and off using an option in gitosis.conf (something similar to daemon = no
or gitweb = yes
)
--- Solution to question 1 ---
It turns out that Git uses templates to create new repositories with the git init
command. By performing mv hooks/post-update.sample hooks/post-update
within the template directory, all future calls to git init
on my server will have the post-update hook configured correctly. (On OSX the template directory is /opt/local/share/git-core/templates/
for those that care)
The other requirement for this to work is turning on Apache rewrite rules so that the HTTP clone URL for the repository looks like http//git.example.com/repo.git
My rewrite rules in /etc/apache2/extra/httpd-vhosts.conf
look like this:
# 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]
--- Still looking for a solution to question 2...HELP! :) ---
Now that HTTP cloning works for all my repositories, I'm wondering if there is a way to manage HTTP access control using gitosis. Setting daemon = no
and gitweb = no
turns off git-daemon and gitweb access for the repository, but since the Apache rewrite rules are still on, the repo is still clone-able at http://git.example.com/repo.git
. Any ideas on how to use gitosis to manage this?
[The question I origin开发者_JAVA百科ally posted]
Is it possible to manage http access to git repositories using gitosis? For example, in gitosis.conf I can manage access for gitweb and git-demon using:
# Allow gitweb to show this repository.
gitweb = yes
# Allow git-daemon to publish this repository.
daemon = no
I'm currently able to clone my repository by issuing the following command:
$ git clone git://git.example.com/repo.git
However, when I issue the following command:
$ git clone http://git.example.com/repo.git
I get the following error message:
fatal: http://git.example.com/repo.git/info/refs not found: did you run git update-server-info on the server?
However, if I log into my server and run the following from within 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
then cloning via http works fine.
Is there any way to manage http access to the repository from within gitosis?
Was gitweb already setup and working? Check this blog for instructions how to setup gitosis with gitweb.
BTW, Gitolite primary feature is that you can have very fine permissions. ie. control permission per branch.
UPDATE: I think gitosis integration w/ gitweb is basically whether it shows up on the project list. It doesn't control the permission to gitweb; that is done via web server (apache).
精彩评论