5 Hooks Git Simples pour Gérer Votre Répertoire

5 Hooks Git 00 Image Présentée

Git est un outil brillant. Il vous permet non seulement de suivre vos modifications dans un fichier grâce aux hooks, mais aussi de collaborer sans effort avec d’autres personnes. À cet égard, Git est un outil qui a fait avancer le développement de FOSS.

Cependant, l’un des plus grands problèmes avec Git est qu’il faut du temps et des efforts pour gérer vos répertoires. Par exemple, valider et synchroniser ces répertoires peut nécessiter deux à trois commandes git. Cela rend leur gestion non seulement fastidieuse mais aussi sujette à des erreurs de l’utilisateur. Ici, nous vous montrons quelques hooks Git simples mais efficaces pour mieux gérer vos répertoires.

Remarque : Vous pouvez également gérer Git dans Emacs. Découvrez comment !

Table des Matières

  • Quels Sont les Hooks Git ?
    1. Empêcher de Pousser vers Master
    1. Rejeter les Pousses vers la Branche Master
    1. Verrouiller le Répertoire contre le Rebasing
    1. Forcer une Vérification de Style et de Syntaxe sur Votre Code
    1. Notifier Automatiquement les Utilisateurs des Changements dans le Répertoire
  • Questions Fréquemment Posées

Quels Sont les Hooks Git ?

Au cœur, git-hook est une sous-commande flexible que vous pouvez utiliser pour créer des scripts personnalisés qui s’exécutent chaque fois que Git effectue une action sur un répertoire. Par exemple, il est possible d’utiliser un hook pour vérifier automatiquement votre répertoire pour des erreurs de style avant même de valider avec.

5 Hooks Git 02 Exemple Linter

La sous-commande hook fonctionne en lisant le dossier “hooks” sous le répertoire “ .git “ de votre répertoire. Ce dossier contient un certain nombre de fichiers préfabriqués qui fournissent un script d’exemple pour chaque action dans Git que vous pouvez automatiser.

5 Hooks Git 03 Répertoire des Hooks par Défaut

Pour la plupart, vous pouvez écrire un hook git dans n’importe quel langage de script que vous souhaitez. Cela le rend incroyablement flexible et accessible à tout développeur logiciel.

Astuce : Pour commencer avec Git, vous devrez d’abord configurer le nom d’utilisateur et l’email de Git. Découvrez comment dans ce guide.

1. Empêcher de Pousser vers Master

L’une des erreurs les plus courantes qu’un utilisateur fait dans Git est de pousser un commit d’une branche de développement directement vers master. Cela peut être incroyablement frustrant si vous utilisez Github pour suivre et maintenir vos projets.

5 Hooks Git 04 Exemple Git Push

Vous pouvez éviter ce problème en créant un hook Git “pre-push” qui vérifiera et confirmera chaque fois que vous essayez de pousser un répertoire depuis la branche master.

  1. Allez dans le répertoire Git que vous souhaitez protéger.

5 Hooks Git 05 Cd Vers le Répertoire

  1. Créez un fichier de hook Git avec votre script de vérification. Puisque c’est un hook qui doit s’exécuter avant un “push”, vous devez créer un fichier de hook “pre-push” :
touch .git/hooks/pre-push
  1. Ouvrez votre nouveau fichier de hook dans un éditeur de texte.
nano .git/hooks/pre-push
  1. À l’intérieur, écrivez votre nouveau hook “pre-push”. Par exemple, le script suivant demandera votre confirmation lorsque vous poussez depuis la branche master :
#!/bin/sh  

protect='master'  
current=$(git symbolic-ref HEAD |sed-e's,.*/\(.*\),\1,')  

if[$protect = $current]  
then  
read-p"Confirmer le push vers master ? Y/n."-n1-r/dev/null  
then  
exit0  
fi  
exit1  
else  
exit0  
fi
  1. Enregistrez votre nouveau hook. Dans nano, faites cela en appuyant sur Ctrl + O, puis Ctrl + X.

5 Hooks Git 07 Hook Pre Push Rempli

  1. Exécutez la commande suivante pour vous assurer que Git peut exécuter votre nouveau hook.
chmod +x .git/hooks/pre-push

2. Rejeter les Pousses vers la Branche Master

En plus de vous empêcher de pousser vers master, vous pouvez également créer un hook côté serveur qui rejettera toutes les poussées vers sa branche master. Cela est incroyablement utile si vous partagez un répertoire avec plusieurs développeurs.

5 Hooks Git 08 Exemple de Log Git

Corrigez cela en créant un hook “pre-receive” qui empêchera automatiquement tout utilisateur restreint de pousser vers la branche master.

  1. Créez le fichier de hook “pre-receive” dans votre répertoire distant.
touch .git/hooks/pre-receive
  1. Ouvrez ce fichier.
nano .git/hooks/pre-receive
  1. Ajoutez le script de rejet dans votre hook “pre-receive”. Par exemple, les lignes de code suivantes devraient fonctionner dès le départ :
#!/bin/sh  

branch=$(git symbolic-ref HEAD |sed-e's,.*/\(.*\),\1,')  

blacklist=(alice bob)  

if[[${blacklist[*]} =~ $USER]]; then  
if["$branch" == "master"]; then  
echo"Vous n'êtes pas autorisé à valider des modifications dans cette branche"  
exit1  
fi  
fi
  1. Enregistrez votre nouveau fichier de hook. Dans mon cas, je dois appuyer sur Ctrl + O, puis Ctrl + X pour enregistrer le fichier.

  2. Enregistrez votre script de hook et rendez-le exécutable.

chmod +x .git/hooks/pre-receive

Astuce : vous pouvez également utiliser un alias Git pour rendre l’utilisation de Git plus efficace.

3. Verrouiller le Répertoire contre le Rebasing

Une autre erreur courante qu’un utilisateur fait dans Git est de rebaser la branche actuellement active. Cela peut être un problème frustrant si vous travaillez sur un répertoire avec plusieurs contributeurs, car le rebasing supprimera les commits que d’autres utilisateurs ont effectués.

5 Hooks Git 11 Page de Manuel Git Rebase

Vous pouvez éviter ce problème en créant un hook “pre-rebase” qui vérifiera si la branche actuelle est verrouillée.

  1. Créez un fichier “pre-rebase” dans votre répertoire “ .git/hooks” :
touch .git/hooks/pre-rebase
  1. Ouvrez ce fichier pour l’éditer.
nano .git/hooks/pre-rebase
  1. Ajoutez le script de rebase à l’intérieur de votre nouveau fichier de hook.
#!/bin/sh  

branch="$2"  
[-n"$branch"]||branch=$(git rev-parse--abbrev-ref HEAD)  
lock="branch.${branch}.rebaselock"  

if["$(git config --bool "$lock")" = true]; then  
echo"hook pre-rebase : "$lock" est défini sur true. Refus de rebaser."  
exit1  
fi
  1. Enregistrez votre nouveau fichier de hook et rendez-le exécutable.
chmod +x .git/hooks/pre-rebase

4. Forcer une Vérification de Style et de Syntaxe sur Votre Code

L’un des usages les plus utiles d’un hook Git est de le lier à un linter de code. C’est un programme simple qui vérifie si votre code suit le style et le format d’un projet.

5 Hooks Git 14 Page de Manuel Shellcheck

  1. Pour lier un linter à votre répertoire Git, commencez par créer un fichier de hook “pre-commit”.
touch .git/hooks/pre-commit
  1. Installez le linter approprié pour le langage de votre projet. Dans ce cas, j’utilise “shellcheck” pour analyser mon code Bash :
sudo apt install shellcheck
  1. Ouvrez votre nouveau fichier de hook et ajoutez le script suivant.
#!/bin/bash  
forfilein $(git diff--cached--name-only--diff-filter=AM |grep-E'\.sh$')  
do  
  
shellcheck "$file"# Exécutez le linter pour chaque nouveau fichier.  
  
if[$?-ne0]; then  
exit1# Terminez le commit si le linter échoue.  
fi  
done
  1. Enregistrez votre nouveau fichier de hook et rendez-le exécutable :
chmod +x .git/hooks/pre-commit

5. Notifier Automatiquement les Utilisateurs des Changements dans le Répertoire

Enfin, vous pouvez également créer un hook Git qui enverra automatiquement un e-mail chaque fois que votre répertoire reçoit un nouveau commit. Cela est utile si vous souhaitez créer un système de notification simple pour votre répertoire.

  1. Créez un fichier de hook “post-receive” dans le répertoire .git/hooks de votre répertoire :
touch .git/hooks/post-receive
  1. Ouvrez votre nouveau fichier de hook Git et entrez le script suivant :
#!/bin/sh  

commit_message=$(git log-1--pretty=%B)  
users=("[email protected]""[email protected]""[email protected]")  
  
for user in"${users[@]}"; do  
    mail -s"Nouveau Commit : $commit_message"$user
  1. Enregistrez votre nouveau fichier de hook et rendez-le exécutable.
chmod +x .git/hooks/post-receive

Questions Fréquemment Posées

Puis-je écrire mes hooks Git dans un langage compilé, comme C ?

L’une des plus grandes limitations des hooks Git est qu’il exige que vous utilisiez un langage que vous pouvez exécuter directement depuis le terminal. Cela signifie que les hooks Git ne prennent pas en charge de langage compilé pour ses scripts. Par exemple, vous pouvez créer un nouveau hook Git en utilisant soit Python soit Shell mais pas C ou C++.

Est-il possible d’exécuter plusieurs hooks dans le même répertoire Git ?

Oui. Bien que les exemples ci-dessus montrent des hooks comme des fonctionnalités uniques et discrètes, vous pouvez facilement les mélanger pour créer votre propre flux de travail unique, rendant les hooks Git incroyablement flexibles et adaptables à toute situation de codage. Par exemple, vous pouvez utiliser à la fois le hook “Empêcher de Pousser vers Master” et le hook “Vérification de Syntaxe” dans votre propre répertoire.

Pourquoi les hooks Git par e-mail n’envoient-ils pas d’e-mail aux utilisateurs ?

Ce problème est probablement dû au fait que votre serveur distant ne peut pas envoyer correctement d’e-mails sortants. Pour résoudre ce problème, assurez-vous que votre serveur distant est sécurisé et qu’il dispose d’un agent de livraison de mail fonctionnel ainsi que d’un domaine SMTP.

Crédit image : Unsplash. Toutes les modifications et captures d’écran Ramces Red.