Como Utilizar Git Hooks?

Como Utilizar Git Hooks?

Desenvolver uma aplicação de qualidade é um processo complexo. Para fazer isso, nós utilizamos ferramentas que são complementares ao processo de codificação.

Um desses processos é a automação. Isso ocorre devido à necessidade dos desenvolvedores e sysadmins (administradores de sistema) de reduzir o tempo de implementação. Git é uma das ferramentas mais populares específicas para essa finalidade.

E é por isso que, neste tutorial, nós iremos mostrar para você como utilizar Git Hooks para aprimorar o seu projeto de hospedagem em VPS!

Git Hooks é uma utilidade interna que vai melhorar a maneira como usamos o Git. Vamos aprender exatamente como ele funciona!

O Que é Git?

Antes de falarmos sobre Hooks, vamos entender rapidamente o que é Git.

Git é um software de código-aberto, de controle de versões de uma aplicação. Ao utilizá-lo, nós podemos monitorar o desenvolvimento de um software detalhadamente.

Git é muito popular entre desenvolvedores, e a maioria dos projetos de código aberto utilizam essa ferramenta.

O Que São Git Hooks?

Com o Git, nós podemos criar ramificações de desenvolvimento (chamados Git Branches), registrar modificações e ter um controle absoluto sobre as versões. Entretanto, é possível automatizar esse processo. A automação do Git funciona no nível dos programas e da implementação. É para isso que os Hooks são utilizados.

Git Hooks são shell scripts executados automaticamente antes ou depois que o Git execute um comando importante, como “Commit” ou “Push”. Para um Hook funcionar, é necessário que o script tenha permissões de execução no sistema Unix. Usando esses scripts, nós podemos automatizar algumas ações.

O Git inclui exemplos de Git Hooks assim que o repositório local é iniciado. Deve ser ressaltado que sites como o Github ou Gitlab não permitem o seu uso em primeira instância. É por isso que eles são usados principalmente em ambientes de desenvolvimento locais ou privados.

Como Usar Git Hooks

Hooks são armazenados na pasta .git/hooks/ para cada projeto copiado, ou em um repositório local recém criado. Lá, nós podemos encontrar uma série de exemplos de Hooks, os quais são ótimos pontos de partida.

Para ativar um Hook, é necessário apenas criar um arquivo e salvá-lo na pasta .git/hooks/. Entretanto, o nome do arquivo é pré-definido pelo Git. Muitos dos Hooks que podemos usar são:

Git Hook Comando Git  Descrição
applypatch-msg.sample git am Quando uma mensagem de patch é alterada.
commit-msg.sample git commit Para definir uma mensagem de commit.
fsmonitor-watchman.sample launch watchman Para integrar watchman.
post-update.sample git push Atualizar todos os dados após push.
pre-applypatch.sample git am Antes de aplicar um patch.
pre-commit.sample git commit Antes de executar um committing.
prepare-commit-msg.sample git commit Quando uma mensagem commit for definida.
pre-push.sample git push Antes de realizar um envio.
pre-rebase.sample git rebase Antes de realizar um pass ou merge.
pre-receive.sample git push Quando executamos push e obtemos data do repositório remoto.
update.sample git push Ao atualizar os dados remotos com push.

Como nós podemos ver, cada Hook é associado a um comando no Git. Com isso, podemos levá-los em consideração quando for conveniente fazer um Hook.

exemplo das notificações de pré-commit dos git hooks

Exemplos de Git Hook

O uso de Hooks é muito amplo, mas ter conhecimento em Bash e outras linguagens ,como Python ou Ruby, são necessárias para usar com todo o seu potencial. Aqui estão alguns exemplos básicos:

Informações Sobre Ações de Commit

Esse exemplo nos mostra a informação de uma ação de Commit. Faça um arquivo chamado prepare-commit-msg dentro da pasta .git/hooks/ do seu repositório. Em seguida, escreva o seguinte script:

#!/bin/sh

SOB=$(git config github.user)
grep -qs "^$SOB" "$1" || echo ". Cambio por @$SOB" >> "$1"

Feito isso, salve e defina as permissões de execução para o arquivo:

:~$ chmod +x prepare-commit-msg

Com este simples Hook, nós receberemos informações relevantes para todas as ações de commits que forem feitas no repositório, instantaneamente.

Gerar documentação antes do envio das modificações

O comando Hook pre-push permite gerar a documentação do nosso código caso tenhamos um gerador instalado (no exemplo usamos o doxygen). Sempre que fizermos uma modificação, a documentação irá ser atualizada automaticamente.

Criar um um arquivo chamado pre-push na mesma pasta de antes (.git/hooks/) e adicionar o script:

#!/bin/bash

doxygen Doxyfile
git add docs/
git commit -m "Update documentation ($(date +%F@%R))"

Salve o arquivo na pasta e, em seguida, configure a permissão de execução:

:~$ chmod +x pre-push

Encontre e corrija os espaços em branco em Commits

Esse tipo de Git Hook de pre-commit é bastante simples de fazer. Basta criar um arquivo chamado “pre-commit” e adicionar o seguinte script:

#!/bin/bash -l

.git/hooks/pre-commit-master-no-no
if [[ $? == 1 ]]
then
exit 1
fi

.git/hooks/pre-commit-debugger
.git/hooks/pre-commit-trailing-spaces
.git/hooks/pre-commit-images
.git/hooks/pre-commit-pair

Agora os espaços em branco irão ser encontrados e corrigidos para todos os Commits.

Conclusão

O Git é uma ferramenta fundamental para os desenvolvedores de hoje em dia. A criação de Git Hooks é uma ótima maneira de aprimorar essa ferramenta ainda mais. Nesse tutorial, revisamos os conceitos fundamentais da automação de processos Git com Hooks.

Fazer um script para Git Hooks pode ser complicado se você não tiver uma base sólida de conhecimento de linguagem de programação, como Bash, por exemplo.

Você deu o primeiro passo na jornada de aprendizado para aprender como usar Git Hooks. Visite a documentação oficial do Git Hook e continue o seu processo de aprendizagem!

Author
O autor

Ariane G.

A Ariane é SEO Team Leader com experiência em conteúdo, localização e SEO. Seu desafio é levar a Hostinger ao topo dos resultados no Brasil, França e Reino Unido. Eventualmente ela compartilha seu conhecimento no blog e nos tutoriais da Hostinger e no tempo livre ela gosta de explorar lugares novos e viver intencionalmente.