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?

238
demandé sur Yves M. 2009-01-09 09:05:57

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).

123
répondu mipadi 2009-01-09 06:53:56

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 ).

141
répondu Max Shenfield 2017-10-24 22:09:42

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 .

8
répondu kilianc 2016-02-13 16:58:40

Que Diriez-vous de git-hooks , il route .git/hooks invoquer dans le script sous le répertoire de projet githooks .

Il ya aussi beaucoup de fonctionnalités pour vous permettre de minimiser la copie et le crochet symlink partout dans l'endroit.

5
répondu cattail 2015-01-06 13:51:49

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:

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

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

3
répondu yuranos87 2018-03-02 13:50:19

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.

1
répondu ericsoco 2017-07-25 20:27:52

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.

1
répondu Mike de Klerk 2017-11-01 14:10:22

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.

1
répondu Empus 2018-07-01 18:51:17