Le test de A2
Quel test décide qu'un héritage est légitime ?
Coding Week
L'historique comme graphe · A3, Coding Week 1A
Hermann Agossou
École Centrale Casablanca • 2026 • Casablanca, Maroc
Doctorant, UTER MID@S, ECC / UH2C
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Section
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Le modèle
Trois questions sur le module précédent
Quel test décide qu'un héritage est légitime ?
Pourquoi annule-t-on une étape rouge plutôt que de la corriger en avançant ?
Vous avez rendu une suite de commits en A2. Que prouvait-elle, au juste ?
Vous avez produit une preuve sans qu'on vous ait dit ce qui la rendait recevable. Ce module explique pourquoi un historique en est une.
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Le modèle
Le problème avant l'outil
Left
Ce que tout le monde a déjà fait.
Right
Trois besoins, avant toute commande.
Le problème est réel avant d'avoir un outil. Gardez les trois besoins de droite : tout le reste du module y répond.
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Le modèle
Nommer les objets avant de manipuler les commandes
Le contenu d'un fichier. Sans nom, sans date.
Un répertoire : des noms associés à des blobs et à d'autres trees.
Un tree, un ou plusieurs parents, un auteur, un message.
Un nom qui désigne un commit. Une branche est une ref qui bouge.
Quatre noms. Aucune commande sur cet écran, et ce n'est pas un oubli.
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Le modèle
La référence, et pourquoi le chapitre 10 vient en premier
Git enregistre chaque version comme un instantané complet adressé par son contenu, construit à partir d'objets blob et tree, et non comme une suite de différences entre versions.
Voir: [1] Chacon & Straub, ch. 10
Une fois le modèle objet acquis, les chapitres 1 à 9 se déduisent. L'inverse est faux : on peut réciter des commandes pendant des années sans savoir ce qu'est un dépôt.
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Le modèle
Adressage par contenu et conséquences
`a.txt` et `b.txt` contiennent tous deux « bonjour ». `git hash-object` leur donne le même identifiant d'objet.
01
Pas d'un compteur, pas d'une date. Le même contenu donne toujours le même nom.
02
Copier un fichier ne double pas la taille du dépôt.
03
C'est ce qui permettra plus tard de s'en servir comme preuve.
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Le modèle
Chaque commit pointe vers son parent
Left
`C` pointe vers son parent `B`, puis `B` pointe vers `A`.
Right
`E` pointe vers `D`, puis `D` pointe vers le parent commun `B`.
Un commit connaît son parent ; un parent ignore ses enfants. On peut donc remonter les parents depuis une ref. Supprimer une branche ne supprime pas immédiatement les objets, mais leur récupération dépend des autres refs, des reflogs et de la rétention.
Le DAG est propre à Git. Les idées durables sont les instantanés nommés, les parents et l'accessibilité.
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Le modèle
Exemple entièrement résolu
| Commit | Étiquette | Changement | Parent ou parents |
|---|---|---|---|
| f3a1c4 | main | fusion du correctif | 4c8d10 et 9b2e77 |
| 9b2e77 | correctif | corrige le calcul de TVA | 1a0be5 |
| 4c8d10 | aucune | ajoute l'export CSV | 1a0be5 |
| 1a0be5 | aucune | version initiale | aucun |
Reconstruisez le même récit à partir de la sortie de `git log –graph` et vérifiez qu'il correspond au dessin. Toute divergence signifie que la lecture était fausse.
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Le modèle
La moitié du raisonnement est donnée
01
Identifiant donné : `1a0be5`.
02
Identifiant donné : `7d4f92`.
03
Identifiant et graphe à compléter.
Dessinez le graphe résultant, placez les deux refs, et dites combien de commits sont accessibles depuis `main`.
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Section
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Les opérations
Pourquoi créer une branche ne coûte rien
Dans cet exemple SHA-1, `refs/heads/main` est associé à l'identifiant `f3a1c4…c2d4`. Une ref empaquetée représente la même association autrement.
Supprimer une branche supprime une ref, pas immédiatement les objets. Une récupération dépend encore des autres refs, des reflogs, de leur rétention et de la collecte.
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Les opérations
Deux formes différentes, un même contenu
Left
Ajoute un commit à deux parents.
Right
Rejoue les commits ailleurs.
Ce qui diffère est la forme du graphe et l'identité des commits. Choisir entre les deux, c'est choisir ce que l'histoire doit montrer.
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Les opérations
La preuve, pas seulement la réponse
Workflow 01
Un commit connu bon, un commit connu mauvais.
Workflow 02
Git place l'arbre au milieu. On exécute le test.
Workflow 03
bon ou mauvais. L'intervalle est divisé par deux.
Workflow 04
Il reste un seul commit. C'est la réponse.
Placez-vous sur le commit accusé et sur son parent, exécutez le test qui échoue sur chacun, et confirmez que la transition est exactement là. C'est cette trace, et non le hash, qui constitue la preuve.
Voir: [2] Chacon & Straub, ch. 7
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Les opérations
Sans détruire le travail des autres
La ref `shared-work` a été reculée de deux commits. Le tip déplacé n'apparaît plus sous ce nom, mais le reflog local et `collaborator-snapshot` peuvent encore fournir des preuves distinctes.
Les étapes destructrices que vous avez choisi de ne PAS faire, et votre raison. La récupération est un jugement sous incertitude sur ce que détiennent les autres machines.
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Les opérations
Ce que devient le journal quand personne n'a écrit le code
Left
Contenu, filiation et métadonnées enregistrées.
Right
Réversibilité.
Quand produire devient plus rapide que relire, la trace et la réversibilité prennent plus de poids. On y revient en A5.
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Les opérations
Trois idées à garder
Dans Git, de nouveaux objets étendent le graphe et les refs mutables nomment les états accessibles.
Elle se conçoit, elle ne s'improvise pas au moment de la panne.
Refs, tags et branches ne sont qu'une instance de ce geste.
Les commandes Git et les forges sont de l'outillage. Les concepts transférables sont les instantanés, la filiation, les noms, l'accessibilité et la réversibilité sous conditions.
Coding Week
1A · Coding Week · A3 Gestion de version · H. Agossou
Appendix