web-dev-qa-db-fra.com

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

J'ai écrit un crochet post-commit Git et cela fonctionne correctement. Cependant, je souhaite ajouter ce crochet à appliquer à tous les référentiels git actuels (et futurs) sur lesquels je travaille. J'ai essayé d'ajouter le crochet à mon ~/.git/hooks/ au lieu de dans le répertoire hooks du répertoire du projet, cependant, cela ne semblait pas fonctionner.

Existe-t-il un moyen de créer des hooks Git globaux qui s'appliqueront à tous les référentiels 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?

260
swanson

Je souhaite ajouter ce crochet à tous les référentiels git actuels (et futurs) sur lesquels je travaille

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

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

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

162
VonC

Depuis la version 1.7.1 de git, vous pouvez configurer init.templatedir dans votre gitconfig pour indiquer à git où chercher les modèles.

Définissez-le comme ceci:

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

Par la suite, les nouveaux référentiels que vous créez ou clonez utiliseront ce répertoire pour les modèles. Placez les crochets que vous voulez dans ~/.git_template/hooks. Les référentiels 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 antérieures à la version 1.7.1, exécuter git init --template ~/.git_template fonctionnera si vous êtes comme moi et que vous souhaitez toujours gérer votre .git_template dir avec le reste de vos fichiers de points. Vous pouvez aussi utiliser le $GIT_TEMPLATE_DIR environnement à dire git init où se trouve votre répertoire de modèles.

282
sklnd

Si vous les voulez partout sur votre système (y compris les utilisateurs autres que vous), vous pouvez modifier le contenu du répertoire de modèles installé - ceux-ci se trouvent dans $PREFIX/share/git-core/templates/hooks, où $PREFIX est probablement /usr/local ou /usr.

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

69
Cascabel

Une approche minimaliste consiste à créer un git_hooks/ _ répertoire dans votre référentiel pour suivre les points d'ancrage que vous écrivez pour ce projet, le signaler à de futurs utilisateurs en le mentionnant dans un README et compter sur eux pour faire le bon choix après leur clonage. . Cela fait un moment que je réfléchis à cela et que je choisis une approche progressive. Plus tard, je pourrais envisager d'utiliser un outil tel que git-hooks .

6
Neil Best