Idealmente, os ganchos são gravados no bash, se você seguir os arquivos de amostra. Mas você pode escrevê-lo em qualquer idioma disponível e apenas verifique se ele possui o sinalizador executável.
Portanto, você pode escrever um código Python ou Go para atingir seus objetivos e colocá-lo na pasta hooks. Funcionará, mas não será gerenciado junto com o repositório.
Duas opções
a) Scripts múltiplos
Você pode codificar seus ganchos dentro de sua ajuda e adicionar um pequeno fragmento de código aos ganchos, para chamar seu script perfeito, assim:
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/myprecommit.js
b) Script único
Uma opção mais legal é adicionar apenas um script para governar todos eles, em vez de vários. Então, você cria um hooks / mysuperhook.go e aponta todos os hooks que deseja.
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/mysuperhook.go $(basename $0)
O parâmetro fornecerá ao script qual gancho foi acionado e você poderá diferenciá-lo dentro do seu código. Por quê? Às vezes, você pode querer executar a mesma verificação de confirmação e envio, por exemplo.
E depois?
Em seguida, convém ter outras funcionalidades, como:
- Ative o gancho manualmente para verificar se está tudo bem, mesmo antes de um commit ou push. Se você apenas chamar o seu script (opção a ou b), faria o truque.
- Acione os ganchos no IC, para que você não precise reescrever as mesmas verificações para o IC, seria apenas chamar os gatilhos de confirmação e envio, por exemplo. O mesmo que o acima deve resolvê-lo.
- Ligue para ferramentas externas, como um validador de descontos ou um validador YAML. Você pode fazer syscalls e precisa lidar com STDOUT e STDERR.
- Certifique-se de que todos os desenvolvedores tenham uma maneira simples de instalar os ganchos, para que um bom script precise ser adicionado ao repositório para substituir os ganchos padrão pelos corretos
- Tenha alguns auxiliares globais, como uma verificação para bloquear confirmações para desenvolver e dominar ramificações, sem precisar adicioná-lo a todos os repositórios. Você pode resolvê-lo tendo outro repositório com scripts globais.
Isso pode ser mais simples?
Sim, existem várias ferramentas para ajudá-lo a gerenciar ganchos. Cada um deles é adaptado para resolver o problema de uma perspectiva diferente, e talvez você precise entender todos eles para obter o melhor para você ou sua equipe. GitHooks.com oferece muita leitura sobre enganchar e várias ferramentas disponíveis hoje.
Atualmente, existem 21 projetos listados lá com diferentes estratégias para gerenciar o Git Hooks. Alguns fazem isso apenas para um único gancho, outros para um idioma específico e assim por diante.
Uma dessas ferramentas, escrita por mim e oferecida gratuitamente como um projeto de código- fonte aberto, é chamada hooks4git . Ele está escrito em Python (porque eu gosto), mas a idéia é manipular todos os itens listados acima em um único arquivo de configuração chamado .hooks4git.ini, que vive dentro do seu repositório e pode chamar qualquer script que você queira chamar, em qualquer idioma .
O uso de ganchos git é absolutamente fantástico, mas a maneira como eles são oferecidos geralmente apenas afasta as pessoas.