From: Sylvain Rabot Date: Sun, 15 Nov 2009 10:04:03 GMT Subject: Make Gitweb behave like Apache mod_userdir Message-ID: <7fce93be0911150204h259b7424md251c54186d05b7d@mail.gmail.com> Hello, I contact you because I spent quite some time to make something pretty basic with gitweb. I made gitweb behave a bit like UserDir module will in apache. In fact it's only configuration but I think it could be useful to others. Basicly it allows users of your server who use git to be able to use gitweb to browse their own root project. E.G. : Alice's private repos : /home/alice/git/product_a.git (cloned from /var/git/product_a.git) /home/alice/git/product_b.git (cloned from /var/git/product_b.git) /home/alice/git/product_c.git (cloned from /var/git/product_c.git) Alice's links to her repos which she wants to be able to browse with gitweb : /home/alice/gitweb/product_a -> /home/alice/git/product_a.git/.git /home/alice/gitweb/product_c -> /home/alice/git/product_c.git/.git Bare repos : /var/git/product_a.git /var/git/product_b.git /var/git/product_c.git /var/git/product_d.git /etc/gitweb.conf : $projectroot = $ENV{'GITWEB_PROJECTROOT'} || "/var/git/"; Apache configuration : RewriteRule ^/~([^\/]+)/?$  /cgi-bin/gitweb.cgi [QSA,E=GITWEB_PROJECTROOT:/home/$1/gitweb/,L,PT] So now all users with a gitweb folder in their home will be able to browse all git repos in it through http:///~. You will find a patch enclosed which try to describe best what I did and why in the gitweb/README. Regards. diff --git a/gitweb/README b/gitweb/README index 66c6a93..6f733e6 100644 --- a/gitweb/README +++ b/gitweb/README @@ -306,8 +306,10 @@ repositories, you can configure apache like this: DocumentRoot /pub/git SetEnv GITWEB_CONFIG /etc/gitweb.conf RewriteEngine on + # make the front page an internal rewrite to the gitweb script RewriteRule ^/$ /cgi-bin/gitweb.cgi + # make access for "dumb clients" work RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI} [L,PT] @@ -332,6 +334,20 @@ something like the following in your gitweb.conf (or gitweb_config.perl) file: $my_uri = "/"; $home_link = "/"; +If you want gitweb to act a bit like UserDir mod in apache, knowing, http:///~ +will list all git repos of located in a special directory in his home (/home//gitweb/), +do the following steps : + +Add this to the VirtualHost section of your apache configuration file : + + RewriteRule ^/~([^\/]+)/?$ /cgi-bin/gitweb.cgi [QSA,E=GITWEB_PROJECTROOT:/home/$1/gitweb/,L,PT] + +Modify your gitweb.conf file, located at /etc/gitweb.conf in this example, with : + + $projectroot = $ENV{'GITWEB_PROJECTROOT'} || "/path/to/the/defaul/project/root"; + +Thus, each user with a gitweb folder in his home will be able to browse it with gitweb. +/!\ The gitweb folder and user's home folder must be readable by the webserver user. PATH_INFO usage -----------------------