O git
permite realizar diversos procedimentos em diversos momentos, ele permite a execução de scripts
ao relizar um pull, push, commit, etc. O git
chama essas execuções atravéz de arquivos padronizados dentro da pasta .git/hooks
, são programas que você pode colocar para acionar ações em determinados pontos na execução do git
. Hooks
que não tem permisão de execução são ignorados.
Para mais detalhes e para ver a documentação mais detalhada das ações que são interpretadas por ele veja em sua documentação: https://github.com/git/git/blob/master/Documentation/githooks.txt
Para interpretarmos a ação do git pull
devemos criar um arquivo em ${PATH_PROJECT}/.git/hooks
com o nome de post-merge
na documentação o arquivo post-merge
diz que:
“This hook is invoked by linkgit:git-merge[1], which happens when a
git pull
is done on a local repository. The hook takes a single parameter, a status
flag specifying whether or not the merge being done was a squash merge.
This hook cannot affect the outcome ofgit merge
and is not executed,
if the merge failed due to conflicts. This hook can be used in conjunction with a corresponding pre-commit hook to
save and restore any form of metadata associated with the working tree
(e.g.: permissions/ownership, ACLS, etc). See contrib/hooks/setgitperms.perl
for an example of how to do this.“
Agora basta escrevermos um script
no arquivo post-merge
que verifica se um arquivo foi alterado e notifica o usuário, como a idéia desse post
não é gerar algo complexo vou apenas executar um echo
com uma mensagem quando o arquivo docker-compose.yml
for alterado pelo git pull
.
#!/bin/sh -eu # This file goes in .git/hooks/post-merge if git diff-tree --name-status -t -r --root HEAD | grep -q 'docker-compose.yml' then echo "Your docker-compose.yml file changed. You may want to run $ docker-compose up --build -d" fi
Para quem usa Linux
uma boa alternativa ao echo
é usar o zenity
, ele vai mostrar uma caixa de dialogo customizada.
[...] zenity --error --text="Your docker-compose.yml file changed. You may want to run $ docker-compose up --build -d" --title="docker-compose was changed" [...]
Nota: lembre-se de executar o comando para dar permissão de execução no arquivo:
$ chmod +x .git/hooks/post-merge
Referências:
https://github.com/git/git/blob/master/Documentation/githooks.txt
https://gist.github.com/sindresorhus/7996717
https://gist.github.com/jaydorsey/5e28df857a4dfd5b581237a9f588e89a