git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Make Gitweb behave like Apache mod_userdir

From
Sylvain Rabot <sylvain@abstraction.fr>
Date
Nov 15, 2009, 10:04 UTC
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://<host>/~<user>.

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]
 </VirtualHost>
@@ -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://<host>/~<user> 
+will list all git repos of <user> located in a special directory in his home (/home/<user>/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
 -----------------------
Next: Junio C Hamano
Message 1 of 18 in “Make Gitweb behave like Apache mod_userdir”
  1. Sylvain RabotNov 15, 2009
  2. Junio C HamanoNov 15, 2009
  3. Jakub NarebskiNov 17, 2009
  4. Sylvain RabotNov 17, 2009
  5. Jakub NarebskiNov 17, 2009
  6. Sylvain RabotNov 17, 2009
  7. Junio C HamanoNov 17, 2009
  8. Sylvain RabotNov 17, 2009
  9. Junio C HamanoNov 17, 2009
  10. Sylvain RabotNov 17, 2009
  11. Junio C HamanoNov 17, 2009
  12. J.H.Nov 17, 2009
  13. J.H.Nov 17, 2009
  14. Junio C HamanoNov 17, 2009
  15. J.H.Nov 17, 2009
  16. Junio C HamanoNov 18, 2009
  17. J.H.Nov 18, 2009
  18. Sylvain RabotNov 18, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.