gitweb- fatal: não é um repositório git

2

Portanto, configurei um servidor simples executando o debian stable (squeeze) e configurei o git.
Usando gitolite, eu tenho toda a funcionalidade (pelo menos o clone / push / pull / commit) trabalhando.
A instalação do gitweb foi sem problemas. No entanto, quando eu acesso o gitweb, recebo uma tela do gitweb sem nenhuma lista de repos listada.

# 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

Aqui está o que eu vejo em /var/lib/gitolite/projects.list :

testrepo.git

E em /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";

O que está faltando?

EDIT: Descobri isso, quando eu tinha chmod'd o repositório que eu tinha esquecido de adicionar a opção -R! Eu mudei a umask mas isso não era retroativo ... e esqueci que o chmod só mudaria o diretório e não o conteúdo.

@VonC, obrigado pela sua configuração. Embora a configuração não fosse o problema, obtive algumas boas ideias além da minha configuração atual mínima. Eu votaria em você, mas ainda não posso.

    
por Robert Mason 16.03.2011 / 01:59

1 resposta

1

Aqui está minha configuração "gitweb-gitolite", esperando que isso ajude você a encontrar o que está faltando em sua configuração:

Eu incluí meu gitweb.conf.pl no final de gitweb_config.perl (como mencionado no gitolite doc ) assim:

use lib (".");
require "gitweb.conf.pl";

Aqui está o meu gitweb.conf.pl , adaptado de gitolite/contrib/gitweb/gitweb.conf :
(note que tenho caminhos personalizados)

# --------------------------------------------
# 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/);
};

Como mencionado no documento de administração , meu arquivo .gitolite.rc contém:

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

, que referencia os mesmos repositórios reponames.git que os presentes no diretório $projects_list definido no gitweb.conf.pl ( $projects_list sendo igual a $gl_home/repositories ):

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

REPO_BASE sendo definido no arquivo .gitolite.rc :

> grep REPO_BA .gitolite*
.gitolite.rc:$REPO_BASE="repositories";
    
por 16.03.2011 / 08:25

Tags