Git e Gitweb no DreamHost

Queria colocar no meu site uma área com repositórios de código no qual estou trabalhando. Git foi minha primeira escolha, vendo que deixei o SVN para trás a algum tempo. Infelizmente o DreamHost, que hospeda meu site, não tem suporte oficial a Git.

Neste tutorial explico como configurar um repositório Git no DreamHost, inclusive com o Gitweb ativado. Você terá acesso de commit no seu repositório usando SSH e ele estara publicamente disponível para ser clonado via HTTP (uma vez que não temos o git-daemon rodando).

Aviso que o objetivo aqui não é ensinar a usar o Git, e sim, ensinar como publicar um repositório no DreamHost.

Preparando um hostname

Seu repositório Git pode ser instalado em qualquer um de seus sites hospedados no DreamHost. Preferi criar um sub-domínio exclusivo para isolar o conteúdo e facilitar meu gerenciamento.

Atualizando o Git

Neste momento, a versão instalada nos servidores do DreamHost é a 1.5.6.5. Achei prudente atualizar para uma versão >= 1.6 na tentativa de manter a compatibilidade com a versão do Git que acompanha as distros mais recentes (ex. Ubuntu Jaunty).

Acesse sua conta no DreamHost via SSH e faça download da última versão estável do Git. Algumas coisas devem ser observadas antes de instalar:

Portanto, após descompactar o código fonte, atente-se para rodar o script de configuração com as seguintes opções (o restante da instalação é convencional):

$ ./configure --prefix=/home/$USER/packages NO_CURL=1 NO_MMAP=1

Criando o repositório

Como criei um sub-domínio para meus repositórios, a raíz do meu domínio está em /home/$USER/git.example.com. Dentro deste diretório,  crie seu repositório:

$ mkdir test.git
$ cd test.git
$ git init --bare

Edite o arquivo description com algo relevante para aparecer no Gitweb. Por se tratar de um repositório que será clonado via HTTP, é necessário ativar um hook a ser executado após cada commit. Este hook atualiza algumas informações necessárias para clonar o repositório que convecionalmente é feito pelo git-daemon.

$ mv hooks/post-update.sample hooks/post-update

Na sua máquina local, dentro de um repositório Git válido já com alguns commits, adicione o seu repositório remoto (usei o nome “public” no exemplo). Em seguida faça o push para criar o branch master:

$ git remote add public ssh://username@example.com/home/username/git.example.com/test.git
$ git push public master

Caso não queira passar pela amolação de digitar senha a todo momento para atualizar o repositório, copie sua chave para o servidor remoto.

Quem quiser clonar o seu repositório público o fará via HTTP pelo comando a seguir:

$ git clone http://git.example.com/test.git

Instalando o Gitweb

Para usar o Gitweb, você precisa ter o suport a CGI ativado no DreamHost, como normalmente se tem por padrão. Copie o conteúdo da pasta gitweb que acompanha o tarball do Git para qualquer lugar acessível externamente (exemplo: crie a pasta cgi-bin/ e mova o arquivo para lá para termos http://git.example.com/cgi-bin/gitweb.cgi).

Nesta pasta, crie o arquivo gitweb_config.perl com o seguinte conteúdo:

$GIT = "/home/USERNAME/packages/bin/git";
$projectroot = "/home/USERNAME/git.example.com/";
$home_link_str = "http://git.example.com";

@stylesheets = ("gitweb.css");

$logo = "git-logo.png";
$favicon = "git-favicon.png";
$site_name = "git repositories";

Polindo a instalação

Desativei o directory listing que é comportamento padrão editando o arquivo .htaccess e acrescentando a seguinte linha:

Options -Indexes

Recomendo também criar um arquivo index.php que redirecione os acessos a http://git.example.com para o Gitweb:

<?php
header("location:http://git.example.com/cgi-bin/gitweb.cgi");
?>

Considerações finais

Este material foi fortemente baseado no conteúdo citado nas referências. É basicamente uma compilação atualizada das melhores partes com alguns poucos toques pessoais.

Por fim, sugiro que você, dono de uma conta no DreamHost, vote para que a equipe técnica que administra os servidores, proveja suporte nativo.

Referências:

Postado em 18/05/2009 às 17:08 por Thiago · Link permanente
Em: artigo, desenvolvimento, en, pt_br · Com as tags: ,

Deixe uma Resposta