There don’t seem to be any straight-forward documents on how to set up gitweb, the web interface to git repositories. Or at least I couldn’t find any. After failing to get it working a couple of times and then succeeding a couple of times in different ways here’s the recipe I came up with to get what you can see on http://git.ianloic.com/. What I have there is a bunch of git trees I’m following or working on. Perhaps not a bunch, but at least a few.
What you need:
- a recent git installed
- the gitweb files (from your git distribution) somewhere in your web tree
Gitweb comes as part of recent git distributions in a
gitweb/ directory. This needs to be accessible from the web. I just have a git checkout in my web area and use that. When you build git you can supply all kinds of defaults that are applied when
gitweb.perl is transformed into
gitweb.cgi. Compile-time configuration and since you can override all that in a config file I prefer to just use
gitweb.perl directly. My config file
gitweb-config.pl looks like this:
# where's the git binary? $GIT = "/home/yakk/bin/git"; # where's our projects? $projectroot = "/home/yakk/git.ianloic.com"; # what do we call our projects in the ui? $home_link_str = "projects"; # where are the files we need for web display? @stylesheets = ("/git/gitweb/gitweb.css"); $logo = "/git/gitweb/git-logo.png"; $favicon = "/git/gitweb/git-favicon.png"; # what do we call this site $site_name = "Ian's git trees"; # these variables should be empty $site_header = ""; $home_text = ""; $site_footer = ""; $projects_list = ""; $export_ok = ""; $strict_export = "";
Most of that should be fairly straight-forward.
$projectroot are local filesystem paths for the git binary and the directory that contains your git trees respectively.
$favicon are URLs. In my case I just use relative URLs. You can customize most of the other variables to tweak the text to display. We have values for all these because
gitweb.perl contains junk defaults that need to be cleared.
I wrote a little wrapper CGI,
invoke-gitweb.cgi to invoke
gitweb.perl with an environment variable to tell it to load
#!/bin/sh GITWEB_CONFIG=gitweb-config.pl exec perl git/gitweb/gitweb.perl
invoke-gitweb.cgi into the directory that contains your git trees. Make
invoke-gitweb.cgi executable and make sure your Apache knows to execute *.cgi as cgi scripts.
If you load
invoke-gitweb.cgi in your browser you should see gitweb in action! But your URLs are stupid.
Let’s fix that with a
RewriteEngine on RewriteRule ^$ /invoke-gitweb.cgi RewriteRule ^([?].*)$ /invoke-gitweb.cgi$1
This will make any requests for just the directory invoke gitweb and any requests starting with
? invoke gitweb with those arguments. It works pretty well for me.