Neste artigo, assume-se que você tenha um site hospedado em um servidor[bb], que esteja rodando Git e SSH.

Repositório local

Crie um repositório local normalmente, caso já tenha, pule esta etapa.

$ mkdir meusite.com.br
$ cd meusite.com.br
$ git init

Repositório remoto

Neste exemplo, vou utilizar a estrutura que o Plesk utiliza para aos domínios.

Precisamos de uma pasta que fique fora de visibilidade da web, portanto, utilizarei a pasta private, que fica na raiz do domínio.

$ cd /var/www/vhosts/meusite.com.br/private

Criamos a pasta do repositório:

$ mkdir meusite.git/
$ cd meusite.git/

Iniciamos um repositório “crú” no mesmo local:

$ git --bare init

E então configuramos o Git com as seguintes opções:

$ git config core.worktree /var/www/vhosts/meusite.com.br/httpdocs
$ git config core.bare false
$ git config receive.denycurrentbranch ignore

Configuramos também o Hook que será executado após toda atualização:

$ cat > hooks/post-receive
#!/bin/bash
SITE_PATH=/var/www/vhosts/meusite.com.br

cd $SITE_PATH/httpdocs
git --work-tree=. --git-dir=$SITE_PATH/private/meusite.git checkout -f

E colocamos permissão para execução:

$ chmod +x hooks/post-receive

Processo de atualização

O processo para atualização é bem simples. Primeiro criamos outro “master” branch, chamado “web”.

$ git remote add web ssh://meusite@servidor.com.br/var/www/vhosts/meusite.com.br/private/meusite.git

Em seguida, realize qualquer alteração:

$ echo "funcionou!" > teste.html
$ git commit -am 'teste'
$ git push web +master:refs/heads/master

Tente acessar: http://meusite.com.br/teste.html

Após isso, você pode atualizar somente com “git push web”, configurando:

$ git config push.default current

Quaisquer dúvidas sobre o Git, podem ser retiradas através do canal #git na irc.freenode.net.

Este material foi baseado no Using Git to manage a web site.