Les scripts de hook Git peuvent-ils être gérés avec le repository?

Nous aimerions créer quelques scripts de base que nous pouvons tous partager – pour des choses comme le pré-formatage des messages de validation. Git a des scripts de hook pour ceux qui sont normalement stockés sous /.git/hooks/ . Toutefois, ces scripts ne sont pas propagés lorsque des personnes effectuent un clone et qu’elles ne sont pas contrôlées par la version.

Existe-t-il un bon moyen d’aider tout le monde à obtenir le bon script? Puis-je simplement faire en sorte que ces scripts hook pointent vers des scripts contrôlés par version dans mon repo?

Théoriquement, vous pouvez créer un répertoire de hooks (ou n’importe quel nom que vous préférez) dans votre répertoire de projet avec tous les scripts, puis les .git/hooks lien symbolique dans les .git/hooks . Bien sûr, chaque personne qui a cloné le repo devrait configurer ces liens symboliques (bien que vous puissiez avoir une idée très précise et avoir un script de déploiement que le cloner pourrait exécuter pour les configurer de manière semi-automatique).

Dans Git 2.9 , l’option de configuration core.hooksPath spécifie un répertoire de hooks personnalisé.

Déplacez vos hooks vers un répertoire suivi de hooks dans votre référentiel. Ensuite, configurez chaque instance du référentiel pour utiliser les hooks suivis au lieu de $GIT_DIR/hooks :

 git config core.hooksPath hooks 

En général, le chemin peut être absolu ou relatif au répertoire où sont exécutés les hooks (généralement la racine de l’arbre de travail; voir la section DESCRIPTION des man githooks de l’ man githooks ).

Si votre projet est un projet JavaScript et que vous utilisez npm tant que npm de paquets, vous pouvez utiliser des hooks partagés pour appliquer des githooks lors de l’ npm install .

Que diriez -vous de git-hooks , il route .git/hooks invoke dans le script sous les githooks répertoire du projet.

Il y a aussi beaucoup de fonctionnalités pour vous permettre de minimiser le hook de copie et de lien symbolique partout.

La plupart des langages de programmation modernes, ou plutôt leurs outils de construction, prennent en charge les plug-ins pour gérer les hooks git. Cela signifie que tout ce que vous devez faire est de configurer votre package.json, pom.xml, etc., et quiconque dans votre équipe n’aura pas d’autre choix que de se conformer à moins qu’il ne modifie le fichier de génération. Le plugin appenda du contenu au répertoire .git pour vous.

Exemples:

https://github.com/olukyrich/githook-maven-plugin

https://www.npmjs.com/package/git-hooks

pre-commit rend cela facile pour les hooks de pre-commit. Ne répond pas à la question de l’OP concernant la gestion d’un hook git arbitraire, mais les hooks de pre-commit sont probablement les plus fréquemment utilisés à des fins de qualité de code.

Nous utilisons des solutions Visual Studio (et donc des projets) qui ont des événements pré et post-build. J’ajoute un projet supplémentaire nommé ‘GitHookDeployer’. Le projet auto modifie un fichier dans l’événement de post-construction. Ce fichier est configuré pour copier dans le répertoire de construction. Ainsi, le projet est construit à chaque fois et n’est jamais ignoré. Dans l’événement de construction, il s’assure également que tous les hooks git sont en place.

Notez que ce n’est pas une solution générale, car certains projets, bien sûr, n’ont rien à construire.

Vous pouvez faire de votre répertoire de crochets un autre repository git et le lier comme un sous-module … Je pense que cela en vaut la peine seulement si vous avez beaucoup de membres et que les hooks changent régulièrement.