Usando git hooks
Boa noite, acho que os git hooks são subutiliados e resolvi vir aqui divulgá-los.
O que são?
Os git hooks são scripts que são executados quando algum evento do git acontece, por exemplo, quando você roda git push
ou git commit
. Existem hooks que são executados na máquina do cliente e outros na máquina remota.
O uso dos hooks é bem variado, o mais comum do usos é para validação de mensagens de commit, ou do código/modificação, enviar emails e abrir ou fechar tickets num sistema de bug tracking. Quem já contribuiu pacotes para o AUR teve contado com esses hooks, eles os usam maravilhosamente bem: validam arquivos, mensagens de commit, permissões etc.
Como são
Você pode dar uma olhada neles inspecionando a pasta .git/hooks
em qualquer repositório que você possuir. Os exemplos são scripts shell ou perl, porem podem ser arquivos binários, esses arquivos são executados para determinados eventos e o git passa informações para eles pelo stdin
.
Dois exemplos:
commit-msg
Esse hook roda na máquina do cliente quando ele executa um git commit
, esse hook tem acesso à mensaagem de commit e pode modificá-la. Se o hook returnar status diferente de zero o commit é abortado, isso é ótimo para validar commits e não permitir que usuários escrevam mensagens que não estão de acordo com alguma norma do projeto, por exemplo o husky.
post-receive
Esse hook é executado quando um usuário roda um git push
, ele é o último hook a ser executado e o resultado dele não altera o resuldado do git push
. Esse script recebe como entrada o seguinte: oldref newref ref
, que são as referencias antigas, novas e o nome delas. Esse hook é utilizado normalmente para gerar páginas estáticas do git, atualizar status de tickets e enviar emails de commits.
Meu caso de uso
Tenho um projeto chamado dovel email (dovel.email) e decidi criar as paginas web do git usando hooks. Assim eu consegui criar um index que lista todos os repos do projeto e cada projeto tem seus commits, tags, branches e arquivos gerados por scripts shell. O esquema é fantástico, por isso decidi falor sobre ele aqui, no servidor não é necessário nenhuma instalação, somente precisa do hook.
Com isso meus usuários ficam por dentro do desenvolvimento do projeto, e eu consigo desenvolver de uma forma simples: um git push
atualiza as páginas, ou seja, 0 fricção.
Veja o index do git: git e o repositório com os hooks: scripts para ver o resultado.
Por quê?
Acho que isso é uma questão pessoal acima de tudo, porém alguns pontos são importantes de se observar:
- Isso te torna independente de 3os como o github
- Você contribui para a descentralização da web
- Traz os dados para o seu lado e com isso ganha privacidade
- É mais democrático o uso de email para contribuições e os hooks ajudam muito
Esses foram os principais motivos para eu iniciar essa prática, não é fácil, porém acredito ser um passo na direção de uma internet mais saudável. A documentação oficial se encontra no rodapé em [1].
Referências
- [1] git-scm