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:
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.
$GIT
and
$projectroot
are local filesystem paths for the git binary
and the directory that contains your git trees respectively.
@stylesheets
, $logo
and
$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
gitweb-config.pl
:
#!/bin/sh GITWEB_CONFIG=gitweb-config.pl exec perl git/gitweb/gitweb.perlDrop
gitweb-config.pl
and 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 .htaccess
file:
RewriteEngine on RewriteRule ^$ /invoke-gitweb.cgi RewriteRule ^([?].*)$ /invoke-gitweb.cgi$1This 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.