O que são Git Hooks?
Git Hooks são uma funcionalidade do Git que permite automatizar tarefas e aplicar políticas de segurança e qualidade de código em um repositório. Eles consistem em scripts no lado do cliente que são executados em determinados pontos do ciclo de vida do Git, como antes de enviar ou receber mudanças ou durante a execução de comandos git. Os hooks são personalizados para cada repositório e podem ser criados em qualquer linguagem de script, como Bash, Python ou Ruby.
Quais são os tipos de Git Hooks disponíveis?
O Git possui dois tipos de Hooks: Hooks de Cliente e Hooks de Servidor. Client-side Hooks são executados no computador do desenvolvedor quando determinadas ações são tomadas, como fazer um commit ou fazer um push. Os Hooks do Servidor são executados no servidor Git quando um push é recebido. Eles permitem aplicar políticas de segurança e qualidade de código para manter a consistência do repositório. Alguns exemplos de Hooks são:
- pre-commit: Executado antes de uma confirmação. Utilizado para verificar a qualidade de código, erros de sintaxe e estilo de codificação.
- post-commit: Executado após uma confirmação. Utilizado para notificar a equipe, atualizar a documentação e outras tarefas que precisam ser executadas após uma alteração no código.
- pre-push: Executado antes de fazer push para um repositório remoto. Utilizado para garantir que o código está OK, atualizar a documentação e etc.
Como criar um Git Hook?
Para criar um Hook, basta criar um arquivo com o nome do Hook desejado na pasta .git/hooks, que fica na raiz do repositório local. Em seguida, defina as permissões de execução para o arquivo e adicione o código do script. É importante lembrar que Hooks não são compartilhados com outros usuários do repositório, mas podem ser versionados e compartilhados entre os usuários.
Como configurar um Hook para ser executado em um evento específico?
Para configurar um Hook para ser executado em um evento específico, defina o nome do Hook correspondente no arquivo na pasta .git/hooks. O Git executa o Hook automaticamente quando o evento apropriado ocorre. Por exemplo, para configurar um Hook para ser executado antes de uma confirmação, crie um arquivo chamado “pre-commit” na pasta .git/hooks.
Como verificar se um Hook está sendo executado?
Para verificar se um Hook está sendo executado, basta adicionar um comando “echo” no script do Hook para exibir uma mensagem na tela. Se a mensagem aparecer durante a realização da ação correspondente, então o Hook está sendo executado corretamente.
Como desativar um Git Hook?
Para desativar um Hook, basta remover ou renomear o arquivo do Hook na pasta .git/hooks. Também é possível renomeá-lo para que o Git ignore o Hook em alguns casos. Por exemplo, para renomear o Hook pre-commit para pre-commit.disabled, basta digitar o comando:
mv .git/hooks/pre-commit .git/hooks/pre-commit.disabled
Como adicionar uma mensagem personalizada em um Hook?
Basta adicionar um comando “echo” no script do Hook e verifique se a mensagem é exibida corretamente. A mensagem pode ser personalizada de acordo com as necessidades do projeto. Por exemplo, para mostrar uma mensagem na tela antes de confirmar as alterações no código, adicione o seguinte código ao arquivo pre-commit:
echo "Atenção! Verifique o código antes de confirmar as alterações!"
Como chamar outro Hook em um script?
Basta adicionar o comando “source
source .git/hooks/pre-commit
Como criar um Hook personalizado com o Symfony?
Para criar um Hook personalizado com o Symfony, é necessário criar uma classe que implemente a interface “GitHookHookInterface”. Em seguida, defina o método “execute” para executar as tarefas necessárias. Por exemplo, para criar um Hook que atualiza a documentação após cada confirmação, digite o seguinte código:
namespace AppGitHook;
use GitHookHookInterface;
class PostCommitHook implements HookInterface
{
public function execute(array $args): void
{
// atualiza a documentação
exec("php docgenerator.php");
}
}
Como integrar um Hook personalizado com Symfony?
Para integrar um Hook personalizado com o Symfony, é necessário definir o serviço correspondente no arquivo services.yaml. Em seguida, adicione o serviço à tag “git.hook”, para que o Symfony saiba que o serviço é um Hook. Por exemplo, para integrar o Hook criado na seção anterior, digite o seguinte código:
services:
AppGitHookPostCommitHook:
tags:
- { name: git.hook }
Como personalizar um Hook na linha de comando?
Para personalizar um Hook na linha de comando, basta passar os argumentos necessários para o Hook no comando git. Por exemplo, para passar o nome de um arquivo para o Hook, digite o seguinte comando:
git commit -m "mensagem" -- --filename arquivo.txt
Em seguida, no script do Hook, use a variável $args['filename']
para acessar o valor do argumento.