Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Lancer un contrôle au push avec Git

Après cette leçon: Je peux faire lancer un contrôle par Git avant qu’un push passe.

Leçon de 60 min13 commandesLab Git et Gitea : apprendre clone, commit et push sur un serveur Git à soi

Arrêter un changement cassé avant qu’il parte

Une boutique garde ses prix dans un fichier. Quelqu’un efface le prix du thé par erreur et pousse. Toute l’équipe a maintenant une liste cassée.

Un contrôle lancé au moment du push aurait dit non. Les équipes réelles en utilisent toute la journée.

À la fin de cette leçon

Remarque

Je peux faire lancer un contrôle par Git avant qu’un push passe.

Mots-clés

MotCe que ça veut dire
Crochetun script que Git lance à un moment précis
Contrôleun test qui réussit ou échoue
Code de sortiele nombre par lequel un programme finit, 0 pour réussi
CIun serveur qui lance des contrôles à chaque push
Exécuteurla machine qui fait le travail d’une CI

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un crochet est un script lancé par Git

Git cherche dans le dossier .git/hooks des scripts qui portent des noms précis. Un script nommé pre-push se lance juste avant un push. S’il finit par un code de sortie différent de zéro, Git arrête le push.

Le script doit être exécutable. Ici, le contrôle cherche le prix du thé dans prix.txt.

Créer un dossier partagé où pousser

Commande
git init --bare -b main partage.git

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le cloner sous le nom magasin

Commande
git clone partage.git magasin

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire un fichier de deux prix

Commande
printf 'Cafe 1.50\nThe 1.20\n' > magasin/prix.txt

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le contrôle

Commande
printf '#!/bin/sh\ngrep -q "The" prix.txt || { echo "controle echoue : pas de prix du The"; exit 1; }\necho "controle reussi"\n' > magasin/.git/hooks/pre-push

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Rendre le contrôle exécutable

Commande
chmod +x magasin/.git/hooks/pre-push

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Choisir le fichier

Commande
git -C magasin add prix.txt

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

L’enregistrer

Commande
git -C magasin commit -m "Ajouter les prix"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pousser et voir le contrôle se lancer

Commande
git -C magasin push -u origin main

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un contrôle qui échoue refuse le push

Cassez maintenant le fichier exprès. Supprimez la ligne du thé et enregistrez. Le contrôle échoue, et Git refuse le push : le commit cassé reste sur votre ordinateur.

Vous annulez ensuite le mauvais commit avec git revert, vu dans la leçon sur annuler une erreur, et vous poussez de nouveau.

Supprimer la ligne du thé

Commande
sed -i '/The/d' magasin/prix.txt

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Enregistrer l’erreur

Commande
git -C magasin commit -am "Retirer le the par erreur"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Essayer de le pousser

Commande
git -C magasin push

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Annuler l’erreur

Commande
git -C magasin revert --no-edit HEAD

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pousser de nouveau

Commande
git -C magasin push

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

On croit souvent qu’un crochet fait partie du projet, donc que toute l’équipe l’a. Ce n’est pas vrai. Un crochet vit dans .git, et un clone ne le copie pas. Chacun peut le sauter avec --no-verify. Une équipe a besoin du même contrôle sur le serveur.

La CI lance le même contrôle

CI veut dire intégration continue : un serveur qui lance des contrôles à chaque push. Vous écrivez les étapes dans un fichier gardé dans le dépôt, donc chaque clone a les mêmes règles.

Dans Gitea, le fichier vit dans .gitea/workflows. Le serveur confie chaque tâche à un exécuteur. Le résultat s’affiche sur la pull request : la personne qui relit voit tout de suite un échec.

Exemple travaillé : un fichier de workflow

Ligne du fichierCe qu’elle dit
`name: check`le nom affiché sur la page
`on: [push]`se lancer à chaque push
`runs-on: ubuntu-latest`le genre de machine à utiliser
`- uses: actions/checkout@v4`récupérer d’abord les fichiers du projet
`- run: grep -q The prix.txt`le contrôle lui-même, le même test que le crochet

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Le Gitea du labo n’a pas d’exécuteur

Ce fichier fait le travail du crochet. Chaque étape se lance dans l’ordre, et une étape qui finit par un code différent de zéro fait échouer la tâche.

Le Gitea du labo accepte le fichier et note une exécution pour chaque push, mais elle reste en attente. Aucun exécuteur n’est branché, donc rien ne la fait. Une vraie équipe en branche un.

À propos de ce labo et de sa source: Lab Git et Gitea : apprendre clone, commit et push sur un serveur Git à soi

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.