Gostaríamos de criar alguns scripts básicos de gancho que todos possamos compartilhar - para coisas como pré-formatação de mensagens de confirmação. O Git possui scripts de gancho para os quais normalmente são armazenados <project>/.git/hooks/
. No entanto, esses scripts não são propagados quando as pessoas fazem um clone e não são controlados por versão.
Existe uma boa maneira de ajudar todos a obter os scripts de gancho certos? Posso apenas fazer esses scripts de gancho apontarem para scripts controlados por versão no meu repositório?
pre-commit
facilita isso para ganchos de pré-confirmação. Não responde à pergunta do OP sobre o gerenciamento de qualquer gancho git arbitrário, mas os ganchos pré-confirmação são provavelmente os mais usados para fins de qualidade de código.Respostas:
Teoricamente, você pode criar um
hooks
diretório (ou o nome que você preferir) no diretório do projeto com todos os scripts e depois vinculá-los.git/hooks
. Obviamente, cada pessoa que clonou o repositório teria que configurar esses links simbólicos (embora você possa ser realmente sofisticado e ter um script de implantação que o clonador possa executar para configurá-los de maneira semi-automática).Para fazer o link simbólico no * nix, tudo o que você precisa fazer é:
use
ln -sf
se você estiver pronto para substituir o que está em.git/hooks
fonte
core.hooksPath
configurar um arquivo fora do .git para vincular à pasta hooks.No Git 2.9 , a opção de configuração
core.hooksPath
especifica um diretório de ganchos personalizados.Mova seus ganchos para um
hooks
diretório rastreado em seu repositório. Em seguida, configure cada instância do repositório para usar o rastreado emhooks
vez de$GIT_DIR/hooks
:Em geral, o caminho pode ser absoluto ou relativo ao diretório em que os ganchos são executados (geralmente a raiz da árvore de trabalho; consulte a seção DESCRIÇÃO
man githooks
).fonte
Se o seu projeto é um projeto JavaScript e você usa
npm
como gerenciador de pacotes, pode usar shared-git-hooks para aplicar githooksnpm install
.fonte
.git/hooks
.Para usuários do Nodejs, uma solução simples é atualizar o package.json com
A pré-instalação será executada antes
e redireciona o git para procurar ganchos dentro do diretório. \ hooks (ou qualquer outro nome que você escolher). Este diretório deve imitar . \. Git \ hooks em termos de nome de arquivo (menos a .sample) e estrutura.
Imagine o Maven e outras ferramentas de compilação terão o equivalente à pré-instalação .
Também deve funcionar em todas as plataformas.
Se precisar de mais informações, consulte https://www.viget.com/articles/two-ways-to-share-git-hooks-with-your-team/
fonte
E quanto ao git-hooks , ele
.git/hooks
invoca a rota no script no diretório do projetogithooks
.Também existem muitos recursos para minimizar o gancho de cópia e link simbólico em todo o lugar.
fonte
A maioria das linguagens de programação modernas, ou melhor, suas ferramentas de construção, suporta plugins para gerenciar os ganchos do git. Isso significa que tudo que você precisa fazer é configurar seu package.json, pom.xml etc., e qualquer pessoa em sua equipe não terá outra opção a não ser cumprir, a menos que altere o arquivo de compilação. O plugin adicionará conteúdo ao diretório .git para você.
Exemplos:
https://github.com/rudikershaw/git-build-hook
https://github.com/olukyrich/githook-maven-plugin
https://www.npmjs.com/package/git-hooks
fonte
Estamos usando soluções do Visual Studio (e, portanto, projetos) que têm eventos de pré e pós-compilação. Estou adicionando um projeto adicional chamado 'GitHookDeployer'. O projeto modifica automaticamente um arquivo no evento pós-construção. Esse arquivo está definido para copiar para o diretório de compilação. Assim, o projeto é construído sempre e nunca é ignorado. No evento de construção, ele também garante que todos os ganchos git estejam no lugar.
Observe que essa não é uma solução geral, pois alguns projetos, é claro, não têm nada para construir.
fonte
Você pode usar uma solução gerenciada para gerenciamento de gancho de pré-confirmação como pré-confirmação . Ou uma solução centralizada para ganchos do lado do servidor, como o Datree.io . Possui políticas internas como:
Ele não substitui todos os seus ganchos, mas pode ajudar seus desenvolvedores com os mais óbvios, sem o inferno de configuração de instalar os ganchos em todos os computadores / repositórios de desenvolvedores.
Disclaimer: Eu sou um dos fundadores da Datrees
fonte
Você pode fazer da sua pasta hooks outro repositório git e vinculá-lo como um submódulo ... Acho que vale a pena apenas se você tiver muitos membros e hooks alterados regularmente.
fonte
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:
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.
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:
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.
fonte
Para usuários graduados
Achei esses scripts muito úteis para projetos gradle.
build.gradle
apply from: rootProject.file('gradle/install-git-hooks.gradle')
gradle / install-git-hooks.gradle
pré-confirmar
fonte