Nous aimerions créer quelques scripts de hook de base que nous pouvons tous partager - pour des choses comme le pré-formatage des messages de commit. Git a des scripts de 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.
Existe-t-il un bon moyen d'aider tout le monde à obtenir les bons scripts de hook? Puis-je simplement faire pointer ces scripts de hook vers des scripts contrôlés par version dans mon référentiel?
pre-commit
rend cela facile pour les hooks de pré-validation. Ne répond pas à la question de l'OP concernant la gestion d'un hook git arbitraire, mais les hooks de pré-validation sont probablement les plus fréquemment utilisés à des fins de qualité de code.Réponses:
Théoriquement, vous pouvez créer un
hooks
répertoire (ou le nom que vous préférez) dans le répertoire de votre projet avec tous les scripts, puis les lier de manière symbolique.git/hooks
. Bien sûr, chaque personne qui a cloné le référentiel devrait configurer ces liens symboliques (bien que vous puissiez vraiment devenir fantaisiste et avoir un script de déploiement que le cloneur pourrait exécuter pour les configurer semi-automatiquement).Pour faire le lien symbolique sur * nix, il vous suffit de:
utiliser
ln -sf
si vous êtes prêt à remplacer ce qui se trouve.git/hooks
la source
core.hooksPath
configurer un fichier en dehors de .git pour le lier au dossier hooks.Dans Git 2.9 , l'option de configuration
core.hooksPath
spécifie un répertoire de hooks personnalisé.Déplacez vos hooks vers un
hooks
répertoire suivi dans votre référentiel. Ensuite, configurez chaque instance du référentiel pour utiliser le suivihooks
au lieu de$GIT_DIR/hooks
:En général, le chemin peut être absolu ou relatif au répertoire dans lequel les hooks sont exécutés (généralement la racine de l'arborescence de travail; voir la section DESCRIPTION de
man githooks
).la source
Si votre projet est un projet JavaScript et que vous l'utilisez
npm
comme gestionnaire de packages, vous pouvez utiliser shared-git-hooks pour appliquer les githooksnpm install
.la source
.git/hooks
.Pour les utilisateurs de Nodejs , une solution simple consiste à mettre à jour package.json avec
La préinstallation s'exécutera avant
et redirige git pour rechercher des hooks dans le répertoire. \ hooks (ou le nom que vous choisissez). Ce répertoire doit imiter . \. Git \ hooks en termes de nom de fichier (moins le .sample) et de structure.
Imaginez Maven et les autres outils de construction auront un équivalent à préinstaller .
Il devrait également fonctionner sur toutes les plateformes.
Si vous avez besoin de plus d'informations, consultez https://www.viget.com/articles/two-ways-to-share-git-hooks-with-your-team/
la source
Que diriez -vous de git-hooks , il route
.git/hooks
invoquer dans le script sous le répertoire du projetgithooks
.Il existe également de nombreuses fonctionnalités pour vous permettre de minimiser la copie et le lien symbolique partout.
la source
La plupart des langages de programmation modernes, ou plutôt leurs outils de construction, prennent en charge les plugins 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 tout membre de votre équipe n'aura d'autre choix que de se conformer à moins qu'il ne modifie le fichier de construction. Le plugin ajoutera du contenu dans le répertoire .git pour vous.
Exemples:
https://github.com/rudikershaw/git-build-hook
https://github.com/olukyrich/githook-maven-plugin
https://www.npmjs.com/package/git-hooks
la source
Nous utilisons des solutions Visual Studio (et donc des projets) qui ont des événements avant et après la construction. J'ajoute un projet supplémentaire nommé «GitHookDeployer». Le projet modifie lui-même un fichier dans l'événement post-génération. Ce fichier est configuré pour être copié dans le répertoire de génération. Ainsi, le projet est généré à chaque fois et n'est jamais ignoré. Dans l'événement de génération, il s'assure également que tous les crochets 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.
la source
Vous pouvez utiliser une solution gérée pour la gestion des hooks avant validation, comme la pré-validation . Ou une solution centralisée pour les git-hooks côté serveur comme Datree.io . Il a des politiques intégrées comme:
Il ne remplacera pas tous vos crochets, mais il pourrait aider vos développeurs avec les plus évidents sans l'enfer de configuration d'installer les crochets sur chaque ordinateur / référentiel de développeurs.
Avertissement: je suis l'un des fondateurs de Datrees
la source
Vous pouvez faire de votre dossier hooks un autre dépôt git et le lier en tant que sous-module ... Je suppose que cela ne vaut la peine que si vous avez beaucoup de membres et de hooks changés régulièrement.
la source
Idéalement, les hooks sont écrits en bash, si vous suivez les exemples de fichiers. Mais vous pouvez l'écrire dans n'importe quelle langue disponible, et assurez-vous simplement qu'il a le drapeau exécutable.
Ainsi, vous pouvez écrire un code Python ou Go pour atteindre vos objectifs et le placer sous le dossier hooks. Cela fonctionnera, mais il ne sera pas géré avec le référentiel.
Deux options
a) Multi-scripts
Vous pouvez coder vos hooks dans votre aide et ajouter un petit fragment de code aux hooks, pour appeler votre script parfait, comme ceci:
b) Script unique
Une option plus intéressante consiste à ajouter un seul script pour les gouverner tous, au lieu de plusieurs. Donc, vous créez un hooks / mysuperhook.go et pointez chaque hook que vous voulez y avoir.
Le paramètre fournira à votre script quel hook a été déclenché, et vous pouvez le différencier dans votre code. Pourquoi? Parfois, vous voudrez peut-être exécuter la même vérification pour commit et push, par exemple.
Puis?
Ensuite, vous voudrez peut-être avoir d'autres fonctionnalités, comme:
Cela peut-il être plus simple?
Oui, il existe plusieurs outils pour vous aider à gérer les git-hooks. Chacun d'eux est conçu pour s'attaquer au problème sous un angle différent, et vous devrez peut-être les comprendre tous pour obtenir celui qui vous convient le mieux, à vous ou à votre équipe. GitHooks.com offre beaucoup de lecture sur le crochet et plusieurs outils disponibles aujourd'hui.
À ce jour, 21 projets y sont répertoriés avec différentes stratégies pour gérer les git hooks. Certains ne le font que pour un seul crochet, certains pour une langue spécifique, etc.
Un de ces outils, écrit par moi et offert gratuitement en tant que projet open source , s'appelle hooks4git . Il est écrit en Python (parce que j'aime ça) mais l'idée est de gérer tous les éléments répertoriés ci-dessus dans un seul fichier de configuration appelé .hooks4git.ini, qui vit à l'intérieur de votre référentiel et peut appeler n'importe quel script que vous souhaitez appeler, dans n'importe quelle langue .
L'utilisation de git hooks est absolument fantastique, mais la façon dont ils sont proposés ne fait que l'éloigner des gens.
la source
Pour les utilisateurs gradle
J'ai trouvé ces scripts très utiles pour les projets Gradle.
build.gradle
apply from: rootProject.file('gradle/install-git-hooks.gradle')
gradle / install-git-hooks.gradle
pré-commit
la source