Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

So I have set up a simple server running debian stable (squeeze), and have configured git.
Using gitolite, I have all functionality (at least the basic clone/push/pull/commit) working.
Installation of gitweb went without any issues. However, when I access gitweb, I get a gitweb screen without any repos listed.

# tail -n 1 /var/log/apache2/error.log
[DATE] [error] [client IP_ADDRESS] fatal: Not a git repository: '/var/lib/gitolite/repositories/testrepo.git'

# cd /var/lib/gitolite/repositories/testrepo.git
# ls
branches  config  HEAD  hooks  info  objects  refs

Here is what I see in /var/lib/gitolite/projects.list:


And in /etc/gitweb.conf:

# path to git projects (<project>.git)
$projectroot = "/var/lib/gitolite/repositories";

# directory to use for temp files
$git_temp = "/tmp";

# target of the home link on top of all pages
#$home_link = $my_uri || "/";

# html text to include at home page
$home_text = "indextext.html";

# file with project list; by default, simply scan the projectroot dir.
$projects_list = "/var/lib/gitolite/projects.list";

# stylesheet to use
$stylesheet = "gitweb.css";

# javascript code for gitweb
$javascript = "gitweb.js";

# logo to use
$logo = "git-logo.png";

# the 'favicon'
$favicon = "git-favicon.png";

What is missing?

EDIT: Figured it out, when I had chmod'd the repository I had forgotten to add the -R switch! I changed the umask but this was not retroactive... and forgot that chmod would only change the directory and not any of the contents.

@VonC, thank you for your config. Though configuration wasn't the issue, I did get some good ideas beyond my very minimal current config. I'd vote you up, but I can't yet.

share|improve this question

Here is my "gitweb-gitolite" configuration, hoping that may help you find what is missing in your configuration:

I have included my at then end of gitweb_config.perl (as mentioned in the gitolite doc) like so:

use lib (".");
require "";

Here is my, adapted from gitolite/contrib/gitweb/gitweb.conf:
(note that I have custom paths)

# --------------------------------------------
# Per-repo authorization based on gitolite ACL
# Include this in gitweb.conf
# See doc/3-faq-tips-etc.mkd for more info

# please note that the author does not have personal experience with gitweb
# and does not use it.  Some testing may be required.  Patches welcome but
# please make sure they are tested against a "github" version of gitolite
# and not an RPM or a DEB, for obvious reasons.

# HOME of the gitolite user
my $gl_home = $ENV{HOME} = "/home/mccprdg1";

# the following variables are needed by gitolite; please edit before using

# this should normally not be anything else
$ENV{GL_RC} = "$gl_home/.gitolite.rc";
# this can have different values depending on how you installed.

# If you installed using the 'from-client' method it will be this:
$ENV{GL_BINDIR} = "$gl_home/.gitolite/src";
# if you used RPM/DEB or "root" methods it **might** be this:
#$ENV{GL_BINDIR} = "/usr/local/bin";
# if you used the "non-root" method it **might** be this:
#$ENV{GL_BINDIR} = "$gl_home/bin";
# If in doubt take a look at ~/.ssh/authorized_keys; at least one of the lines
# might contain something like:
#       command="/home/git/.gitolite/src/gl-auth-command
# and you should use whatever directory the gl-auth-command is in (in this
# example /home/git/.gitolite.src)

# finally the user name
$ENV{GL_USER} = $cgi->remote_user || "gitweb";

# now get gitolite stuff in...
unshift @INC, $ENV{GL_BINDIR};
require gitolite_rc;    gitolite_rc -> import;
require gitolite;       gitolite    -> import;

# set project root etc. absolute paths
$ENV{GL_REPO_BASE_ABS} = ( $REPO_BASE =~ m(^/) ? $REPO_BASE : "$gl_home/$REPO_BASE" );
$projects_list = $projectroot = $ENV{GL_REPO_BASE_ABS};

$export_auth_hook = sub {
    my $repo = shift;
    # gitweb passes us the full repo path; so we strip the beginning
    # and the end, to get the repo name as it is specified in gitolite conf
    return unless $repo =~ s/^\Q$projectroot\E\/?(.+)\.git$/$1/;

    # check for (at least) "R" permission
    my ($perm, $creator) = &repo_rights($repo);
    return ($perm =~ /R/);

As mentioned in the admin doc, my .gitolite.rc file contains:

$PROJECTS_LIST = $ENV{HOME} . "/projects.list";

, which references the same reponames.git repositories than the ones present in the directory $projects_list defined in the ($projects_list being equals to $gl_home/repositories):

> grep REPO_BASE *$ENV{GL_REPO_BASE_ABS} = ( $REPO_BASE =~ m(^/) ? $REPO_BASE : "$gl_home/$REPO_BASE" );$projects_list = $projectroot = $ENV{GL_REPO_BASE_ABS};

REPO_BASE being defined in the .gitolite.rc file:

> grep REPO_BA .gitolite*
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.