sexta-feira, 15 de agosto de 2008

Repositório Git em um servidor web - completo

Neste post vou passar informações de como fiz para hospedar um repositório Git em um servidor compartilhado (shared hosting). Um servidor compartilhado é daqueles servidores web baratos, acessados via painel de controle, e que é usado por você e por mais um monte de clientes (por isso é chamado "compartilhado").

Este post foi feito para usuários avançados. Um requisito importante para esta técnica é ter acesso SSH ao servidor e saber usar SSH.


Instalar o Git


Em servidores compartilhados, não deve ser comum encontrar o Git instalado. Para instalar o Git, os passos são (atenção, você precisa ter bastante espaço livre no servidor de hospedagem):

  1. Baixar o pacote .tar.gz ou .tar.bz2 do Git

  2. Criar a pasta /home/<usuario>/usr

  3. Descompactar o pacote do Git e rodar ./configure --prefix=/home/<usuario>/usr

  4. make && make install

Assim os binários do Git ficarão instalados no seu diretório /home/<usuario>/usr/bin/

Você pode remover o pacote do Git (arquivo .tar.gz ou .tar.bz2) e a pasta de compilação a fim de liberar espaço.

Criar o repositório Git remoto


Crie um diretório para seu novo repositório. Este diretório precisa ficar localizado dentro de uma pasta que o Apache é capaz de dar acesso às pessoas de fora. No meu caso (CPanel + Apache), a pasta fica em /home/<usuario>/public_html/repo, portanto executo o seguinte comando:

$ cd /home/leopinheiro/public_html/repo

$ mkdir repositorio.git

Entre no diretório e inicialize um repositório Git cru:

$ cd repositorio.git

$ git --bare init

> Initialized empty Git repository in /home/jwaine/public_html/repo/repositorio.git/

Configurar o repositório Git local para acessar o Git remoto


O Git é um sistema de controle de versão distribuído, e não existe "dar commit no repositório remoto" da mesma forma como usuários de Subversion e CVS fazem. Todo commit tem que ser dado no repositório local e, opcionalmente, o usuário pode publicar seu repositório remotamente (copiando o repositório local para o repositório remoto).

Para criar um repositório Git local:

  1. Crie uma pasta para o repositório Git

  2. Rode "git init" dentro da pasta

  3. Faça o primeiro commit

Ok, de agora adiante estou assumindo que o leitor já tem um repositório Git local.

Configure seu repositório local para acessar o repositório remoto:

$ git remote add <nome_do_repositorio_remoto> ssh://<usuario_da_shell_remota>@<endereço_IP_ou_host>:/home/<usuario>/caminho_do_repositorio

No meu caso, o comando seria este:

$ git remote add repositorio-web ssh://leopinheiro@pinheiro.eng.br/~/public_html/repo/repositorio.git

Caso você tenha errado ao adicionar o repositório remoto (ou precise mudar a configuração), pode alterá-la editando o arquivo local <pasta_do_repositorio>/.git/config

Empurrar o repositório Git local para o Git remoto


Para empurrar todo o repositório local para o repositório remoto, execute:

$ git push --all <nome_do_repositorio_remoto>

No meu caso, o comando seria:

$ git push --all repositorio-web

Se você receber o erro:  git-receive-pack: command not found


Se você receber este erro, então deverá mudar o comando git-push para:

$ git push --receive-pack=~/usr/bin/git-receive-pack --all <nome_do_repositorio_remoto>

No meu caso, o comando seria:

$ git push --receive-pack=~/usr/bin/git-receive-pack --all repositorio-web

Puxar o repositório Git remoto para o repositório Git local


Se você colocou a pasta do repositório remoto no lugar certo, deverá ser capaz de acessá-la através da web (você deve saber qual é o endereço dela - lembre-se de que este é um tutorial para usuários avançados).

Para puxar o repositório remoto, é necessário primeiro configurar a forma de acesso ao servidor remoto, que pode ser via SSH (caso a pessoa que vá acessar seja só você) ou via HTTP (caso você esteja compartilhando seu repositório com o mundo). Para adicionar um repositório remoto leitura-e-escrita via SSH, já ensinei ali em cima como fazer, o comando é exatamente igual, a única diferença é o comando para "puxar" o repositório remoto para o repositório local.

Para adicionar um repositório somente-leitura via HTTP, execute:

$ git remote add <nome_do_repositorio_http> http://<caminho>/<pasta_do_repositorio_remoto>

No meu caso, o comando seria:

$ git remote add acesso-http http://repo.pinheiro.eng.br/repositorio.git

Nenhum comentário:

Postar um comentário

Por favor identifique-se: primeiro nome, instituição, ou o que lhe convier.