303 votes

Application d'un hook git post-commit à tous les dépôts actuels et futurs

J'ai écrit un hook Git post-commit et il fonctionne correctement. Cependant, je veux ajouter ce hook pour qu'il s'applique à tous les dépôts git actuels (et futurs) sur lesquels je travaille. J'ai essayé d'ajouter le hook à mon ~/.git/hooks/ plutôt que dans le répertoire des hooks dans le répertoire du projet, cependant, cela ne semble pas fonctionner.

Existe-t-il un moyen de créer des hooks Git globaux qui s'appliqueront à tous les dépôts de mon système (sans avoir à les copier dans chaque répertoire de projet) ? Sinon, quelle serait la meilleure solution pour l'avenir - peut-être un modèle git-init ?

4 votes

Depuis la version 2.9 de Git, la meilleure approche à cet égard a changé : La réponse de VonC est une meilleure solution. stackoverflow.com/a/37293198/2741954

0 votes

Cela répond-il à votre question ? changer les hooks git par défaut

304voto

sklnd Points 1746

À partir de la version 1.7.1 de git, vous pouvez définir les paramètres suivants init.templatedir dans votre gitconfig pour indiquer à git où chercher les modèles.

Réglez-le comme ceci :

git config --global init.templatedir '~/.git_template'

Par la suite, les nouveaux dépôts que vous créez ou clonez utiliseront ce répertoire pour les modèles. Placez les hooks que vous voulez dans ~/.git_template/hooks . Les dépôts existants peuvent être réinitialisés avec les modèles appropriés en exécutant git init dans le même répertoire .git est dans.

Pour les versions de git plus anciennes que 1.7.1, l'exécution de git init --template ~/.git_template fonctionnera si vous êtes comme moi et que vous voulez toujours gérer votre .git_template avec le reste de vos fichiers dot. Vous pouvez également utiliser la fonction $GIT_TEMPLATE_DIR environnement à raconter git init où se trouve votre répertoire de modèles.

61 votes

Excellente réponse. Si quelqu'un d'autre se demande si ré-exécuter git init sur un repo existant l'efface - il ne le fait pas voir : stackoverflow.com/questions/5149694/

0 votes

Pour moi, cela ne fonctionnait pas avec le chemin relatif vers le dossier de modèle git pour copier des fichiers en utilisant git init sur des dépôts existants. J'ai dû utiliser le chemin complet à la place.

2 votes

Juste pour info, ~/.git_template n'est pas automatiquement créé pour vous avec la commande. Vous devez le faire vous-même avec mkdir ~/.git_template.

242voto

VonC Points 414372

Je veux ajouter ce crochet pour l'appliquer à tous les dépôts git actuels (et futurs) sur lesquels je travaille.

Avec git 2.9+ (juin 2016), tout ce que vous devez faire est :

git config --global core.hooksPath /path/to/my/centralized/hooks

Voir " changer les hooks git par défaut " : ceci a été fait pour gérer les crochets centralisés.

72voto

Jefromi Points 127932

Si vous voulez qu'ils soient présents partout sur votre système (y compris chez d'autres utilisateurs que vous), vous pouvez modifier le contenu du répertoire des modèles installés - qui se trouve à l'adresse suivante $PREFIX/share/git-core/templates/hooks$PREFIX est probablement /usr/local ou /usr .

Si vous voulez que ce soit juste pour vous, alors oui, la chose la plus simple serait le --template de git-init. Vous pouvez facilement conserver un répertoire personnel de modèles qui contient des liens symboliques vers la version installée des valeurs par défaut que vous souhaitez conserver (crochets individuels, répertoire d'informations...), puis votre propre contenu dans le répertoire hooks/post-commit et tout ce que vous voulez personnaliser.

11 votes

Merci, ça a bien marché. Et pour l'appliquer rétroactivement à mes projets existants, j'ai juste exécuté git init à nouveau et il a ajouté mon nouveau crochet.

0 votes

C'est une solution de contournement intéressante, mais elle nécessite que vous changiez tous vos dépôts. C'est faisable, mais n'y a-t-il pas une possibilité avec un plugin ou autre (c'est ainsi que cela se fait chez Bazaar) ?

2 votes

Pour le git intégré de SourceTree sur OS X, ils sont dans /Applications/SourceTree.app/Contents/Resources/git_local/sh‌​are/git-core/templat‌​es/hooks

6voto

Neil Best Points 326

Une approche minimaliste consiste à créer un git_hooks/ dans votre dépôt afin de suivre les hooks que vous écrivez pour ce projet, attirez l'attention des futurs utilisateurs en le mentionnant dans un fichier d'aide. README et compter sur eux pour faire ce qu'il faut après avoir cloné. J'ai cogité sur cette question pendant un certain temps et j'ai choisi une approche incrémentale. À terme, je pourrais envisager d'utiliser un outil tel que git-hooks .

4 votes

C'est tellement, tellement loin d'être une vraie solution que j'ai du downvoter, désolé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X