Instalação de Servidor GIT sobre WebDAV e gitweb no Fedora

Este post documenta o procedimento de instalação de um servidor GIT com acesso via WebDAV e gitweb. O objetivo desta instalação é ter um servidor de GIT que possa ser utilizado exatamente como um servidor SVN, sem grandes traumas na transição de SVN para GIT. Por exemplo, deseja-se ter o servidor GIT como um centralizador de repositórios, no qual os usuários possam usar “git clone/pull/push” da mesma forma que usariam “svn update/commit”.

A instalação foi realizada no Fedora 11.

Instalação do Servidor Web

Instalar o servidor Apache:

yum install httpd

Por default, o arquivo de configuração do Apache já carrega os módulos do WebDAV.

cat /etc/httpd/conf/httpd.conf
...
LoadModule dav_module modules/mod_dav.so
...
LoadModule dav_fs_module modules/mod_dav_fs.so

Colocar o Apache na inicialização do sistema:

chkconfig --levels 235 httpd on
/etc/init.d/httpd start

Configuração do WebDAV

Criar o arquivo git.conf:

cat /etc/httpd/conf.d/git.conf
Alias /git "/srv/git"
<Directory "/srv/git">
        DAV on
        Options +Indexes +FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all

        AuthType Basic
        AuthName "Git"
        AuthUserFile /etc/httpd/passwd.git
        Require valid-user
</Directory>

Criar o arquivo de senhas a autenticação do tipo Basic:

htpasswd -c /etc/httpd/passwd.git usuario

Criar diretório dos repositórios para testar a autenticação:

mkdir /var/git

Reiniciar o Apache e testar o endereço http://localhost/git:

/etc/init.d/httpd restart

Instalação e Configuração do GIT

yum install git

Criação de um Repositório

Criar um repositório de teste:

mkdir -p /srv/git/myproject
cd /srv/git/myproject
git --bare init
Initialized empty Git repository in /srv/git/myproject/

Habilitar o hook de post-update:

cd /srv/git/myproject/
cp hooks/post-update.sample hooks/post-update
chmod +x hooks/post-update

O conteúdo do hooks/post-update deve ser:

cat hooks/post-update
exec git update-server-info

Executar manualmente a primeira vez:

./hooks/post-update

Dar permissão correta para o usuário do Apache (no caso do Fedora é apache):

chown -R apache:apache /srv/git/myproject/

Testando

No cliente, instalar o GIT (neste caso, o teste foi feito no localhost mesmo):

yum install git

Configuracao mínima:

git config --global user.name "My Name"
git config --global user.email "my@email.com"

Configurar usuário e senha do servidor:

cat ~/.netrc
machine localhost
login usuario
password senha

Testar acesso ao servidor via curl:

curl --netrc --location -v http://localhost/git

Clonar o repositório remoto:

git clone http://localhost/git/myproject
Initialized empty Git repository in /home/user/myproject/.git/

Adicionar alguma coisa ao repositório:

cd myproject
echo testando > teste.txt
git add teste.txt
git commit

Enviar modificações ao servidor:

git push origin master
Fetching remote heads...
  refs/
  refs/tags/
  refs/heads/
updating 'refs/heads/master'
  from 0000000000000000000000000000000000000000
  to   87366d467e2dfcc6057bf7d5e112b79ede984861
    sending 3 objects
    done

Instalação e Configuração do gitweb

Instalar gitweb:

yum install gitweb

Criar arquivo gitweb.conf para o Apache:

cat /etc/httpd/conf.d/gitweb.conf
Alias /gitweb /var/www/git

<Directory /var/www/git>
  Options +ExecCGI
  AddHandler cgi-script .cgi
  DirectoryIndex gitweb.cgi
</Directory>

Criar arquivo de configuração do gitweb:

cat /etc/gitweb.conf
$projectroot = '/srv/git/';
@git_base_url_list = ('http://localhost/git')

Reiniciar o Apache e testar o endereço http://localhost/gitweb:

/etc/init.d/httpd restart

Para mais informações

* 8 Ways To Share Your GIT Repository: http://www.jedi.be/blog/2009/05/06/8-ways-to-share-your-git-repository
* How to use HTTP Basic Authentication with git: http://maymay.net/blog/2008/08/08/how-to-use-http-basic-authentication-with-git
* How To Set Up WebDAV With Apache2 On Fedora 10: http://www.howtoforge.com/how-to-set-up-webdav-with-apache2-on-fedora-10

2 comments

  1. Taciano Morais Silva

    Olá,

    Fiz tudo como está no tutorial, contudo estou com um erro de acesso ao realizar o push.

    taciano@godel:~/dev/teste/siseventos$ git push origin master
    error: Cannot access URL http://bsi.cerescaico.ufrn.br/git/siseventos/, return code 22
    fatal: git-http-push failed

    Coloquei o meu repositório no servidor na pasta /home/git e coloquei como dono o www-data:www-data do apache2 com DAV que uso.
    Não consegui encontrar o problema? Agradeço qualquer ajuda e parabéns pelo post!

  2. Marcelo Veiga Neves

    Taciano,

    O teste “curl –netrc –location -v http://localhost/git” funcinou? E o git clone funcionou normalmente? Esse erro que tu está observando pode ter diferentes motivos. Eu sugiro que você execute o comando push usando a opção -v (verbose) para ver o erro que o HTTP está retornando.

    Boa sorte ai. Se funcionar, posta o resultado aqui por favor.

    At,
    Marcelo Neves

Post a comment

You may use the following HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>