Repositórios desenv dinâmicos com git
postado em 04/01/2011 04:59 por Guilherme Barile [ 04/01/2011 06:22 atualizado(s) ]
Esta configuração requer que o servidor de desenvolvimento possua git instalado e acesso por ssh.
Via ssh, crie um repositório git
[server] $ cd repo
[server] $ git init
Initialized empty Git repository in /home/user/repo/.git/
[server] $ git add .
[server] $ git commit
Como não estamos trabalhando com um repositório "bare", devemos permitir pedidos de push vindo de outros clones. Para isso, no repositório, executar
[server] $ git config receive.denyCurrentBranch ignore
Além disso, quando este repositório receber um push, queremos automaticamente atualizar os arquivos de trabalho, para isso, utilizamos o hook post-receive, criando o arquivo repo/.git/hooks/post-receive
#!/bin/sh
cd ..
env -i git reset --hard
Devemos também tornar o arquivo executável
[server] $ chmod +x post-receive
Nas estações de trabalho, o repositório deve ser clonado por ssh
[local] $ git clone user@dev.server.com.br:path/to/repo
Cloning into repo...
user@dev.server.com.br's password:
remote: Counting objects: 13, done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 13 (delta 1), reused 0 (delta 0)
Receiving objects: 100% (13/13), 13.64 KiB, done.
Resolving deltas: 100% (1/1), done.
Graças ao hook post-receive configurado no server, toda vez que é executado um push, os arquivos de trabalho do servidor são automaticamente atualizados.
[local] $ vi index.php
[local] $ git add .
[local] $ git commit
[master 6755ec2] test2
1 files changed, 0 insertions(+), 1 deletions(-)
[local] $ git push
user@dev.server.com.br's password:
Counting objects: 8, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 556 bytes, done.
Total 6 (delta 2), reused 0 (delta 0)
To user@dev.server.com.br:path/to/repo
e588f3b..6755ec2 master -> master
Após o push, você pode verificar que o arquivo index.php foi atualizado no servidor. Mas atenção - toda vez que houver uma modificação diretamente no servidor, é imprescindível que seja executado um commit, caso contrário elas serão perdidas quando alguém executar um push.