Há um bom tempo eu uso "Git" e a cada dia acabo conhecendo um pouco mais e me apaixonando por ele. Eu já tinha lido sobre "hooks", mas nunca havia feito uso deles na minha vida real. Então, hoje decidi arremangar as mangas e sujar as mãos.
Mas o que são "hooks"?
São scripts que podem ser disparados quando certas ações especiais são invocadas. Se o script "hook" retorna um código de saída 0, o "Git" continua executando normalmente. Para qualquer código diferente de zero, o "Git" interrompe a operação. É muito simples!
Geralmente existem dois tipos de hooks: os do lado do cliente, que de modo geral são operações de "commit" ou "merge"; e os "hooks" do lado do servidor, que poderão ser um "push", por exemplo. Você pode criar seu script "hook" em diversas linguagem, a maioria deles são escritos em Shell, mas também podem ser escritos em PHP, Python, Ruby ou na linguagem que você preferir, o único detalhe a se observar é que ele terá que ser um script executável.
Os "hooks" encontram-se dentro do seu diretório .git/hooks e por padrão esse diretório vem preenchido com uma série de exemplos:
$ ls .git/hooks $ applypatch-msg.sample commit-msg.sample post-update.sample pre-applypatch.sample pre-commit.sample prepare-commit-msg.sample pre-rebase.sample update.sample
Criando um "Hook":
Digamos que a cada "commit" em meu repositório local eu queira garantir que meus testes sejam rodados. Para isso será necessário criar um "hook pre-commit" que, conforme o nome sugere, ele sempre é executado antes commit e será usado para inspecionar o "snapshot" que está prestes a ser comitado. Bem, vamos por a mão na massa.
1 - Primeiro criamos nosso arquivo:
$ vi .git/hooks/pre-commit
2 - Para esse exemplo eu irei criar um simples shell que chamará minha suíte de testes PHPUnit:
#!/bin/sh # phpunit ./tests
Simples? Sim, e espero que essa dica seja útil. E como costumo dizer: Que a força esteja com você!
Published Jan 08, 2014 by f0rmig4