Les scripts git hook peuvent-ils être gérés avec le dépôt?
nous aimerions faire quelques scripts de base que nous pouvons tous partager -- pour des choses comme le pré-formatage des messages de propagation. Git a des scripts hook pour cela qui sont normalement stockés sous <project>/.git/hooks/
. Cependant, ces scripts ne sont pas propagés lorsque les gens font un clone et ils ne sont pas contrôlés par la version.
y a-t-il un bon moyen d'aider tout le monde à obtenir les bons scripts? Est-ce que je peux juste faire pointer ces scripts hook vers les scripts de version contrôlés dans ma mise en relation?
8 réponses
théoriquement, vous pouvez créer un répertoire hooks
(ou n'importe quel nom que vous préférez) dans votre répertoire de projet avec tous les scripts, et ensuite les faire un lien symbolique dans .git/hooks
. Bien sûr, chaque personne qui a cloné le repo devra mettre en place ces liens symboliques (bien que vous pourriez obtenir vraiment fantaisie et avoir un script de déploiement que le cloner pourrait exécuter pour les configurer semi-automatiquement).
Dans Git 2.9 , le
l'option de configuration core.hooksPath
spécifie un répertoire hooks personnalisé.
déplacez vos hooks vers un répertoire suivi hooks
dans votre dépôt. Ensuite, configurer chaque instance du dépôt pour utiliser le suivi hooks
au lieu de $GIT_DIR/hooks
:
git config core.hooksPath hooks
En général, le chemin peut être absolu ou relatif à la répertoire où les crochets sont exécutés (habituellement la racine de l'arbre de travail; voir la section DESCRIPTION de man githooks
).
si votre projet est un projet JavaScript et que vous utilisez npm
comme gestionnaire de paquets, vous pouvez utiliser shared-git-hooks pour faire respecter les livres githooks sur npm install
.
la plupart des langages de programmation modernes, ou plutôt leurs outils de construction, prennent en charge les plugins pour gérer les crochets git. Cela signifie que tout ce que vous devez faire est de configurer votre paquet.JSON, pom.xml, etc., et n'importe qui dans votre équipe n'aura pas d'autre option que de se conformer à moins qu'ils ne changent le fichier de construction. Le plugin va ajouter du contenu .répertoire git pour vous.
exemples:
pre-commit
ce qui rend cela facile pour les crochets pre-commit. Ne répond pas à la question de L'OP sur la gestion de tout crochet git arbitraire, mais les crochets de pré-propagation 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 construction. J'ajoute un autre projet nommé "GitHookDeployer". Le projet modifie lui-même un fichier dans l'événement post build. Ce fichier est défini pour copier dans le répertoire de compilation. Ainsi le projet est construit à chaque fois et n'est jamais sauté. Dans l'événement de construction, il s'assure également que tous les crochets git sont en place.
noter qu'il ne s'agit pas d'une solution générale, comme certains projets, de bien sûr, n'ont rien à construire.
vous pouvez faire de votre dossier hooks un autre dépôt git et le lier comme un sous-module... J'imagine la peine que si vous avez beaucoup de membres et des crochets en changer régulièrement.