Utilisez les hooks Git pour vérifier votre travail avant qu'il ne quitte votre ordinateur
Un hook Git est un script que Git exécute tout seul à un moment précis, par exemple juste avant un commit ou un push. Dans Preferences › Hooks, GitTree montre ce qui s'exécute quand, vous permet d'ajouter des hooks à partir de modèles prêts à l'emploi, de les modifier et de les tester, de les désactiver et de les réactiver et de les partager avec votre équipe via le référentiel.
Fonctionne dans GitTree Gratuit : toutes les fonctionnalités Git locales, sans compte requis.
Sur cette page
Avant de commencer
- Un référentiel est ouvert : les hooks appartiennent à un seul référentiel.
- Le référentiel est fiable. En mode restreint, Git n'exécute aucun de ses hooks ; vous pouvez toujours les lire et les modifier (repository trust).
- Les hooks sont des scripts shell. Les modèles utilisent le simple
sh, que macOS, Windows (via Git for Windows) et Linux fournissent tous.
Où le trouver
- La boîte de validation : sous le bouton de validation, May run: … répertorie les hooks qu'un commit exécute. Manage Hooks ouvre la page.
- Tools dans la barre d'outils ou dans la section TOOLS du panneau de gauche : Git hooks.
- Le menu de l'onglet Dépôt, ou la palette de commandes : Manage Git Hooks…, ou
Alt+Shift+H. - Preferences (
Mod+,) › Hooks. La recherche dans les préférences de « hooks », « pre-commit » ou « husky » le trouve également.
| Action | macOS | Windows et Linux |
|---|---|---|
| Gérer les hooks Git | ⌥⇧H | Alt+Shift+H |
| Ouvrir les préférences | ⌘, | Ctrl+, |
Mesures
Ouvrir la page Hooks
Utilisez Manage Hooks sous le bouton de validation ou
Alt+Shift+H. Avec plusieurs référentiels ouverts, choisissez-en un dans Repository. La page commence par ce que sont les hooks, un guide How it works en trois étapes et un lien vers cet article.Lisez ce qui s'exécute quand
What runs when affiche le flux de validation (pre-commit, prepare-commit-msg, commit-msg, post-commit) et le flux push (pre-push). Chaque étape indique Runs, Off, Not executable ou No hook, et s'il s'agit de Can stop the action ou uniquement de rapports.

La page nomme les hooks que Git peut exécuter lors de la validation et du push, et propose le partage via .githooks.Interface GitTree avec un référentiel de démonstration. Ajouter un crochet
Appuyez sur Add Hook…. Sous When it runs, choisissez le crochet ; sous Start from, choisissez un modèle, Git’s sample ou Empty script. L'aperçu Script montre exactement ce qui sera écrit. Create Hook écrit le fichier, prêt à être exécuté, et l'ouvre dans l'éditeur.
Modifier le script
Edit ouvre le script avec les numéros de ligne. Modifiez-le et appuyez sur Save (ou
Mod+S). Si le fichier a changé sur le disque depuis que vous l'avez ouvert, GitTree refuse de l'écraser et conserve votre texte afin que vous puissiez le rouvrir et le comparer.Testez-le
Test Run exécute le hook maintenant, comme le ferait Git, sans effectuer de validation ni de push. Pour commit-msg et prepare-commit-msg, saisissez un message à vérifier. La sortie est diffusée et le résultat indique ce que Git ferait : Passed with exit code 0: Git would continue. ou Failed with exit code 1: Git would stop here. Stop met fin à une longue exécution.
Éteignez un crochet ou partagez-le
Le commutateur à côté d'un hook le désactive en le renommant
<name>.disabled, puis le rallume ; rien n'est supprimé. Share Through .githooks place les hooks dans le référentiel de votre équipe (voir ci-dessous).
Résultat attendu
À partir du prochain commit ou push, Git exécute les hooks marqués Runs. La ligne May run: … de la boîte de validation les nomme, et la sortie d'un hook apparaît sous Hook output lorsqu'il imprime quelque chose ou arrête la validation.
Que sont les crochets et pourquoi les utiliser
Git recherche les fichiers exécutables avec des noms fixes dans le dossier hooks (.git/hooks sauf indication contraire de core.hooksPath) et les exécute aux moments correspondants. Un hook qui s'exécute avant une action, telle que pre-commit ou pre-push, peut l'arrêter en quittant avec un statut différent de zéro. Un hook qui s'exécute après, tel que post-commit ou post-merge, ne peut que signaler.
- Détectez les erreurs avant qu'elles ne quittent votre ordinateur : échecs de tests, erreurs de peluches, marqueurs de conflit restants et fichiers surdimensionnés.
- Gardez les messages de validation cohérents, par exemple Conventional Commits ou une clé de problème dans chaque message.
- Obtenez des commentaires en quelques secondes, au lieu d’attendre l’échec d’une exécution de CI.
- Donnez à toute l’équipe les mêmes contrôles en conservant les hooks dans le référentiel.
Les crochets que vous utiliserez le plus
| Crochet | Quand Git l'exécute | Utilisation typique |
|---|---|---|
| pre-commit | Avant la création du commit | Tests de charpie et rapides sur ce qui est indexé ; bloquer les commits sur main |
| prepare-commit-msg | Avant que le message soit écrit | Mettez la clé du problème du nom de la branche dans le message |
| commit-msg | Une fois le message écrit | Vérifiez le format du message, tel que Conventional Commits |
| post-commit | Une fois le commit créé | Notifier ou enregistrer ; impossible d'annuler le commit |
| pre-push | Avant que quoi que ce soit soit envoyé à le dépôt distant | Exécutez la suite de tests complète ; refuser les poussées vers les branches protégées |
| post-merge | Après une fusion ou une extraction | Dites quand un fichier de verrouillage a été modifié pour que les dépendances soient réinstallées |
| post-checkout | Après avoir changé de branche | Nettoyer la sortie de build ou actualiser les fichiers générés |
Les hooks de serveur tels que pre-receive et update s'exécutent uniquement sur un serveur qui reçoit des push. GitTree les répertorie lorsqu'ils sont présents mais ne les teste jamais.
Modèles prêts à l'emploi
| Modèle | Crochet | Ce que ça fait |
|---|---|---|
| Protéger les branches principales | pre-commit | Arrête les commits effectués directement sur main ou master |
| Attrapez les marqueurs de conflit et les espaces | pre-commit | Arrête un commit qui ajoute des marqueurs de conflit restants ou des espaces de fin (git diff --cached --check) |
| Bloquer les gros fichiers | pre-commit | Arrête un commit qui ajoute un fichier de plus de 5 Mo |
| Ajouter la clé du problème | prepare-commit-msg | Commence chaque message avec la clé de problème dans le nom de la branche, par exemple ABC-123 |
| Conventional Commits | commit-msg | Nécessite des résumés tels que feat(parser): accept empty lines |
| Exécuter des tests avant de pousser | pre-push | Exécute npm test, cargo test, go test, pytest ou make test, et arrête la poussée en cas d'échec |
| Protéger les branches distantes | pre-push | Arrête de pousser directement vers le principal ou le maître sur le dépôt distant |
| Rappel de dépendance | post-merge | Indique quand un fichier de verrouillage a été modifié après une extraction ou une fusion |
Chaque modèle est un script ordinaire avec ses paramètres en haut, tels que PROTECTED="main master" ou TEST_COMMAND="". Modifiez-les dans l'éditeur pour les adapter à votre projet.
À quoi sert un test
GitTree exécute le hook via git hook run, afin que Git le trouve et le démarre exactement comme il le ferait lors de l'action réelle, y compris core.hooksPath. Le hook reçoit une entrée inventée :
- pre-commit, pre-merge-commit, post-commit et pre-auto-gc : aucun argument.
- commit-msg et prepare-commit-msg : un fichier temporaire contenant le message que vous avez tapé, supprimé par la suite.
- pre-push : le nom et l'URL de votre dépôt distant push, sans branche sur son entrée.
- post-merge :
0, comme après une fusion normale.
Partagez des hooks avec votre équipe
Les hooks dans .git/hooks ne sont jamais validés, donc chaque clone a le sien. Share Through .githooks les copie dans un dossier .githooks du référentiel et y définit core.hooksPath dans la configuration de ce référentiel. Validez le dossier ; chaque coéquipier l'exécute ensuite une fois après le clonage :
git config core.hooksPath .githooksUse This Clone’s Own Hooks supprime à nouveau ce paramètre. Le dossier .githooks et vos hooks dans .git/hooks restent là où ils se trouvent.
Passer les hooks pour un commit
Ouvrez Commit Options dans la zone de validation et activez Skip Hooks (--no-verify). Git ignore ensuite pre-commit et commit-msg pour ce commit ; prepare-commit-msg et post-commit sont toujours exécutés, et la ligne sous le bouton de validation l'indique. Pour arrêter un hook plus longtemps, désactivez-le sur la page Hooks.
Si quelque chose ne va pas
Un hook affiche Not executable et ne s'exécute jamais.
Sur macOS et Linux, Git ignore un fichier hook sans l'autorisation d'exécution. Appuyez sur Make Executable ; GitTree l'ajoute uniquement là où le fichier est lisible.
"Le hook a changé sur le disque depuis son ouverture ; rouvrez-le pour voir le nouveau contenu."
Un autre programme ou un gestionnaire de hooks a réécrit le fichier. Fermez l'éditeur, rouvrez-le et appliquez votre modification au nouveau contenu.
"Ce hook est un lien. GitTree n'écrit jamais via un lien ; modifiez le fichier vers lequel il pointe."
Le hook est un lien symbolique, souvent créé par un gestionnaire de hook. Modifiez le fichier vers lequel il pointe ou la configuration de cet outil.
Le script fonctionne sur macOS mais échoue sur Linux avec des erreurs « mauvais interprète » ou \
.
Le fichier comporte Windows fins de ligne (CRLF). L'éditeur met en garde contre eux ; enregistrez le script avec les fins de ligne LF.
Test Run est grisé.
Sa raison est à côté du bouton : faites confiance au référentiel, activez le hook, rendez-le exécutable ou notez que ce hook ne reçoit des entrées que pendant l'opération réelle de Git.
Questions
Les hooks font-ils partie du plan Free ?
Oui. La gestion, l'édition, l'exécution de tests et le partage des hooks s'effectuent via Git local et ne nécessitent aucun compte d'hébergement.
Est-ce que GitTree supprime un hook lorsque je le désactive ?
Non. La désactivation renomme le fichier en <name>.disabled ; la mise sous tension le renomme. GitTree ne supprime jamais un hook.
Un hook que je crée sera-t-il validé ?
Pas tant qu'il est dans .git/hooks. Utilisez Share Through .githooks pour conserver les hooks dans le référentiel, où ils sont validés comme n'importe quel autre fichier.
Un hook peut-il être écrit en Node.js ou en Python ?
Oui. Git exécute le fichier avec le programme sur sa première ligne, tel que #!/usr/bin/env node ; l'éditeur affiche ce programme comme Runs with node. Le programme doit être installé sur chaque ordinateur qui exécute le hook.