Arc 3 Quête 13

Les Sceaux Magiques

Tags et versionnage sémantique

Le Maître Archiviste te conduit dans la Salle des Sceaux, une chambre circulaire dont les murs sont couverts de parchemins anciens. Chacun porte un sceau de cire à un endroit précis - certains dorés, d'autres écarlates. Tu remarques que ces sceaux ne sont pas placés au hasard : ils marquent les moments les plus importants de l'Histoire du royaume.

« Archiviste, tu sais désormais mettre de côté ton travail, traquer les bugs dans l'Histoire, et cueillir des commits d'une branche à l'autre. Mais il te manque un art essentiel : poser des Sceaux Magiques sur les moments clés de tes chroniques. Un sceau est une marque permanente, un signet que l'on pose sur un instant précis pour pouvoir le retrouver à jamais. La fondation d'une guilde, une grande victoire, la réparation après un siège - chaque événement majeur mérite son sceau. »

Qu'est-ce qu'un tag ?

Un tag dans Git, c'est comme un sceau de cire posé sur un parchemin important. Contrairement aux branches qui bougent à chaque nouveau commit, un tag est fixe - il pointe toujours vers le même commit.

Les tags servent à marquer des moments importants dans l'historique d'un projet :

  • La sortie d'une version stable (v1.0.0, v2.0.0)
  • Un jalon important du projet (MVP, beta)
  • Un point de référence pour revenir facilement à un état connu

Une branche est un chemin vivant qui grandit à chaque pas. Un sceau, lui, est gravé dans la pierre. Il ne bouge pas. Il dit : ici, quelque chose d'important s'est passé.

Tags légers vs tags annotés

Git propose deux types de tags, comme deux types de sceaux.

Tag léger (lightweight)

Un tag léger est simplement un pointeur vers un commit. Pas de métadonnées supplémentaires - juste un nom associé à un commit.

git tag v0.1.0

C'est comme écrire un numéro au crayon dans la marge d'un parchemin. C'est rapide, mais il n'y a pas d'information supplémentaire.

Tag annoté (annotated)

Un tag annoté contient beaucoup plus d'informations :

  • Le nom du tag
  • La date de création
  • Le nom de l'auteur
  • Un message explicatif
git tag -a v1.0.0 -m "Première version stable du royaume"

C'est un vrai sceau de cire officiel : il porte la marque de l'Archiviste, la date, et une description de pourquoi ce moment est important.

« Les Sceaux légers sont utiles pour un usage personnel, temporaire. Mais pour tout ce qui compte - les versions officielles, les jalons partagés - utilise toujours un Sceau Annoté. C'est la différence entre une note griffonnée et un décret royal. »

Recommandation : En pratique, utilise toujours des tags annotés pour les versions et jalons. Les tags légers sont réservés aux marque-pages temporaires.

Créer un tag

Tag léger

# Taguer le commit actuel (HEAD)
git tag v0.1.0

Tag annoté (recommandé)

# Taguer le commit actuel avec un message
git tag -a v1.0.0 -m "Première version stable"

L'option -a signifie "annotated" et -m permet d'ajouter un message, exactement comme pour git commit -m.

Taguer un commit passé

Tu peux aussi poser un sceau sur un commit ancien. Il suffit de préciser le hash du commit :

# Retrouver le hash du commit à taguer
git log --oneline

# Taguer ce commit
git tag -a v0.1.0 abc1234 -m "Fondation de la guilde"

C'est comme retourner dans les archives pour apposer un sceau sur un événement passé que personne n'avait pensé à marquer à l'époque.

Explorer les tags

Lister tous les tags

git tag

Affiche la liste de tous les tags, triés par ordre alphabétique.

Filtrer les tags par motif

# Tous les tags qui commencent par "v1."
git tag -l "v1.*"

# Tous les tags qui commencent par "v"
git tag -l "v*"

L'option -l (list) accepte un motif avec des caractères joker (*).

Voir les détails d'un tag

git show v1.0.0

Pour un tag annoté, git show affiche :

  • L'auteur du tag et la date
  • Le message du tag
  • Les détails du commit associé (auteur, date, message, diff)

Pour un tag léger, git show affiche uniquement les détails du commit (pas d'information supplémentaire sur le tag lui-même).

« C'est ainsi que l'on distingue un vrai Sceau d'un simple coup de crayon. Le Sceau Annoté porte la signature de son créateur et la raison de son apposition. »

Partager les tags

Par défaut, git push ne pousse pas les tags. Il faut les envoyer explicitement.

Pousser un tag spécifique

git push origin v1.0.0

Pousser tous les tags

git push origin --tags

--tags pousse tous les tags locaux. Si tu as des tags temporaires que tu ne veux pas partager, pousse-les un par un.

Supprimer un tag

Supprimer un tag local

git tag -d v0.1.0

Le tag est supprimé localement. Si tu l'avais déjà poussé vers un dépôt distant, il faut aussi le supprimer là-bas :

git push origin --delete v0.1.0

« On ne brise un Sceau qu'avec une bonne raison. Un Sceau posé par erreur peut être retiré, mais un Sceau partagé avec d'autres guildes nécessite plus de travail pour être effacé. »

Le versionnage sémantique

Les tags suivent souvent une convention appelée Semantic Versioning (SemVer). Le format est :

vMAJEUR.MINEUR.CORRECTIF
Partie Quand l'incrémenter Exemple
MAJEUR Changement incompatible (breaking change) v1.0.0 vers v2.0.0
MINEUR Nouvelle fonctionnalité rétrocompatible v1.0.0 vers v1.1.0
CORRECTIF Correction de bug rétrocompatible v1.0.0 vers v1.0.1

Exemples concrets

  • v0.1.0 - première version de développement, pas encore stable
  • v1.0.0 - première version stable, prête pour la production
  • v1.0.1 - correction d'un bug dans la v1.0.0
  • v1.1.0 - ajout d'une fonctionnalité à la v1.0
  • v2.0.0 - refonte majeure, pas rétrocompatible

« Le versionnage sémantique, c'est le langage commun des guildes. Quand un Archiviste voit passer v2.0.0, il sait que des changements majeurs ont eu lieu. Quand il voit v1.0.1, il sait que c'est une simple réparation. Les chiffres parlent d'eux-mêmes. »

Quand poser un sceau ?

Voici les moments où tu devrais taguer :

  • Release : chaque version livrée aux utilisateurs (v1.0.0, v1.1.0)
  • Jalon : chaque étape importante du projet (v0.1.0 pour le MVP)
  • Version stable : un point de référence fiable pour les autres développeurs
  • Avant un changement risqué : pour pouvoir revenir facilement en cas de problème

Ne tague pas tout. Un tag doit marquer un moment significatif. Si tu tagues chaque commit, les tags perdent leur valeur - comme un sceau qu'on poserait sur chaque page d'un livre.

Exercice pratique - Sceller les Chroniques du Royaume

Crée les chroniques du royaume et marque les trois moments les plus importants de son histoire :

  1. Crée un dépôt avec un premier commit et tague-le v0.1.0 (tag léger)
  2. Ajoute des commits pour développer le royaume
  3. Marque la première grande victoire avec un tag annoté v1.0.0
  4. Ajoute des commits de réparation après un siège
  5. Marque la réparation avec un tag annoté v1.0.1
  6. Explore et inspecte tes tags
  7. Lance le script de vérification

Étape 1 - Créer le dépôt et la fondation de la guilde

mkdir sceaux-magiques
cd sceaux-magiques
git init -b main

Crée le premier parchemin et fais le premier commit :

echo "# Chroniques du Royaume" > chroniques.txt
echo "" >> chroniques.txt
echo "An 1 - La guilde des Archivistes est fondee." >> chroniques.txt
git add chroniques.txt
git commit -m "Fonder la guilde des Archivistes"

Pose un tag léger sur ce moment fondateur :

git tag v0.1.0

Étape 2 - Développer le royaume

echo "An 2 - Les premiers apprentis rejoignent la guilde." >> chroniques.txt
git add chroniques.txt
git commit -m "Accueillir les premiers apprentis"

echo "An 3 - La guilde explore les terres du Nord." >> chroniques.txt
git add chroniques.txt
git commit -m "Explorer les terres du Nord"

Étape 3 - La première grande victoire

echo "An 4 - La guilde remporte la bataille de Fort-Givre." >> chroniques.txt
git add chroniques.txt
git commit -m "Remporter la bataille de Fort-Givre"

Pose un tag annoté pour marquer cette victoire majeure :

git tag -a v1.0.0 -m "Premiere grande victoire - Bataille de Fort-Givre"

Étape 4 - La réparation après le siège

echo "An 5 - Le siege de la Citadelle cause de lourds degats." >> chroniques.txt
git add chroniques.txt
git commit -m "Subir le siege de la Citadelle"

echo "An 6 - Les murailles sont reconstruites plus solides." >> chroniques.txt
git add chroniques.txt
git commit -m "Reconstruire les murailles de la Citadelle"

Pose un tag annoté pour marquer la réparation :

git tag -a v1.0.1 -m "Reparation apres le siege - Murailles reconstruites"

Étape 5 - Explorer tes sceaux

Liste tous les tags :

git tag

Filtre les tags de la version 1 :

git tag -l "v1.*"

Inspecte un tag annoté :

git show v1.0.0

Compare avec un tag léger :

git show v0.1.0

Observe la différence : le tag annoté affiche l'auteur, la date et le message du tag, alors que le tag léger montre directement le commit.

Étape 6 - Lancer la vérification

bash verifier.sh
.\verifier.ps1

Récapitulatif des commandes

Commande Description
git tag <nom> Créer un tag léger
git tag -a <nom> -m "msg" Créer un tag annoté (recommandé)
git tag Lister tous les tags
git tag -l "v1.*" Filtrer les tags par motif
git show <tag> Voir les détails d'un tag
git tag <nom> <commit> Taguer un commit passé
git push origin <tag> Pousser un tag spécifique
git push origin --tags Pousser tous les tags
git tag -d <nom> Supprimer un tag local

Le Maître Archiviste contemple les sceaux que tu as posés sur les chroniques. Il hoche la tête avec satisfaction.

« Tu maîtrises désormais l'art des Sceaux Magiques. Tu sais marquer les moments importants de l'Histoire, distinguer un sceau rapide d'un sceau officiel, et retrouver n'importe quel jalon en un instant. C'est un pouvoir que les meilleurs Archivistes utilisent avec discernement - chaque sceau doit avoir une raison d'être. »

Il désigne un dernier tag doré, accroché au mur au-dessus de la porte de sortie.

« Souviens-toi : un bon sceau raconte une histoire à lui seul. Son nom, son message, son emplacement - tout doit être choisi avec soin. Les Archivistes qui viendront après toi te remercieront. »