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:
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/myprecommit.js
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.
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/mysuperhook.go $(basename $0)
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:
- Déclenchez le crochet manuellement pour vérifier si tout va bien avant même un commit ou un push. Si vous appelez simplement votre script (option a ou b) ferait l'affaire.
- Déclenchez les hooks sur CI, vous n'avez donc pas besoin de réécrire les mêmes vérifications pour CI, ce serait simplement appeler les déclencheurs de validation et de poussée, par exemple. La même chose que ci-dessus devrait le résoudre.
- Appelez des outils externes, comme un validateur de démarque ou un validateur YAML. Vous pouvez effectuer des appels système et devez gérer STDOUT et STDERR.
- Assurez-vous que tous les développeurs ont un moyen simple d'installer les hooks, donc un bon script doit être ajouté au référentiel pour remplacer les hooks par défaut par les bons
- Ayez des assistants globaux, comme une vérification pour bloquer les validations pour développer et maîtriser les branches, sans avoir à l'ajouter à chaque référentiel. Vous pouvez le résoudre en ayant un autre référentiel avec des scripts globaux.
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.