Chapitre 1111 minDébutant
Tags Git, versions et CHANGELOG
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- créer et pousser un tag ;
- numéroter une version selon le versionnage sémantique ;
- tenir un CHANGELOG et publier une release sur GitHub ;
- signer tes commits et tes tags.
3 exercices corrigés
Un tag Git est une étiquette permanente posée sur un commit pour marquer une version livrée, par exemple v1.2.0. Associé au versionnage sémantique (SemVer), à un fichier CHANGELOG et aux releases de GitHub, il permet de savoir à tout moment quelle version tourne, ce qu'elle contient et comment y revenir. Ce chapitre montre comment créer et pousser des tags, numéroter ses versions, tenir un CHANGELOG, publier une release, puis signer ses commits et ses tags avec une clé SSH ou GPG.
Créer un tag
Une branche avance à chaque commit ; un tag reste toujours sur le même commit. Il existe deux sortes de tags :
| Type | Commande | Contenu |
|---|---|---|
| Annoté | git tag -a v1.0.0 -m "Première version livrée" | Un objet à part entière : auteur, date, message, et éventuellement une signature |
| Léger | git tag v1.0.0 | Un simple nom posé sur un commit, sans autre information |
Pour une version, utilise toujours un tag annoté : il dit qui a livré, quand et pourquoi. Les tags légers servent de marque-pages personnels.
git tag -a v1.0.0 -m "Version 1.0.0 : saisie et validation des notes de frais"
git tag -a v0.9.0 -m "Version de démonstration" 4e0f9a2 # sur un commit plus ancien
| Commande | Effet |
|---|---|
git tag | Liste les tags |
git tag -l "v1.*" | Liste les tags qui correspondent au motif |
git show v1.0.0 | Affiche le tag annoté, puis le commit qu'il désigne |
git describe --tags | Situe le commit courant par rapport au dernier tag : v1.0.0-3-g9e1c4a7 signifie 3 commits après v1.0.0, au commit 9e1c4a7 |
git switch --detach v1.0.0 | Se place sur la version 1.0.0 pour la tester (HEAD détaché) |
git switch -c hotfix/1.0.1 v1.0.0 | Crée une branche de correction à partir de la version 1.0.0 |
git tag -d v1.0.0 | Supprime un tag local |
Pousser les tags
git push n'envoie pas les tags. Pousse-les explicitement :
git push origin v1.0.0 # un tag
git push origin --tags # tous les tags locaux
git push --follow-tags pousse les commits et les tags annotés qui les accompagnent ; git config --global push.followTags true en fait le comportement par défaut.
Le versionnage sémantique (SemVer)
Le versionnage sémantique (Semantic Versioning, SemVer 2.0.0) donne un sens à chaque chiffre d'un numéro de version MAJEUR.MINEUR.CORRECTIF :
| Partie | On l'augmente quand… | Exemple |
|---|---|---|
| MAJEUR | Un changement casse la compatibilité : ceux qui utilisent ton API ou ton logiciel doivent s'adapter | 1.4.2 → 2.0.0 |
| MINEUR | Une fonctionnalité est ajoutée sans rien casser | 1.4.2 → 1.5.0 |
| CORRECTIF | Des bugs sont corrigés sans rien casser | 1.4.2 → 1.4.3 |
Quand un chiffre augmente, ceux qui sont à sa droite reviennent à 0. D'autres règles :
- tant que la version majeure vaut
0(0.3.1), tout peut changer à tout moment : le logiciel est en développement initial ; 1.0.0est la première version stable, celle dont tu garantis la compatibilité ;- une préversion s'écrit avec un tiret :
2.0.0-beta.1,2.0.0-rc.1; elle est considérée comme antérieure à2.0.0; - le
vdes tags (v1.0.0) est une convention de Git, pas une partie du numéro SemVer.
Les gestionnaires de dépendances s'appuient sur ces règles. Dans un package.json, "express": "^5.1.0" accepte toute version 5.x.y à partir de 5.1.0 mais pas 6.0.0, parce qu'une version majeure peut casser ton code ; ~5.1.0 n'accepte que les correctifs 5.1.y.
Tenir un CHANGELOG
Un CHANGELOG est un fichier, CHANGELOG.md à la racine du dépôt, qui liste pour chaque version les changements notables, écrits pour des humains. Ce n'est pas une copie du git log : on regroupe, on reformule, on omet les détails internes. Le format le plus répandu est celui de Keep a Changelog :
# Changelog
Les changements notables de Sorbier Frais sont listés dans ce fichier.
Format : Keep a Changelog. Numérotation : versionnage sémantique.
## [Non publié]
### Ajouté
- Duplication d'une note de frais.
## [1.1.0] - 2026-11-20
### Ajouté
- Export CSV des notes validées, pour la comptabilité (#18).
### Corrigé
- Le filtre par mois oubliait les notes du dernier jour du mois (#12).
## [1.0.0] - 2026-10-30
### Ajouté
- Saisie, envoi et validation des notes de frais.
- Connexion par compte, rôles salarié et comptable.
Les rubriques possibles : Ajouté, Modifié, Obsolète, Supprimé, Corrigé, Sécurité. La section Non publié accumule les changements au fil des pull requests ; au moment de livrer, elle devient la nouvelle version, datée.
À l'E6, le CHANGELOG est une preuve directe de l'indicateur « une documentation des versions accompagne l'intégration » : la commission y lit ce que contient chaque version et pourquoi (préparer son dépôt).
Publier une release sur GitHub
Une release GitHub est une page de version associée à un tag : titre, notes de version, et fichiers téléchargeables (l'installeur d'une application de bureau, une archive prête à déployer). GitHub ajoute automatiquement les archives du code source.
Dans l'onglet Releases, Draft a new release : choisis le tag (ou crée-le), écris le titre « Version 1.1.0 », colle la section du CHANGELOG ou clique sur Generate release notes, qui liste les pull requests fusionnées depuis la version précédente. Avec GitHub CLI :
gh release create v1.1.0 --title "Version 1.1.0" --notes-file notes-1.1.0.md
gh release create v1.1.0 ./publish/SorbierFrais-1.1.0.zip --generate-notes # avec un fichier joint
Pour un client lourd C# (WinForms, WPF), la release est l'endroit naturel où déposer l'exécutable publié, au lieu de le versionner dans le dépôt : le dépôt contient le code, la release contient le livrable.
Signer ses commits et ses tags
N'importe qui peut écrire git config user.name "Lina Morel" et commiter sous ce nom : Git ne vérifie pas l'identité de l'auteur. La signature des commits règle ce problème. Chaque commit signé porte une signature faite avec ta clé privée, que GitHub vérifie avec ta clé publique et marque d'un badge Verified.
La façon la plus simple de signer est d'utiliser ta clé SSH, la même que pour te connecter ou une clé dédiée :
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
git config --global commit.gpgsign true # signer tous les commits
git config --global tag.gpgsign true # signer tous les tags annotés
Sur GitHub, ajoute la clé publique une seconde fois dans Settings, SSH and GPG keys, en choisissant le type Signing Key (une clé déclarée comme clé d'authentification ne sert pas à vérifier les signatures). Tes prochains commits afficheront Verified.
L'autre méthode, plus ancienne, utilise une clé GPG (OpenPGP) : gpg --full-generate-key, puis git config --global user.signingkey <identifiant-de-la-clé> et la clé publique exportée avec gpg --armor --export dans les réglages de GitHub.
| Commande | Effet |
|---|---|
git commit -S -m "…" | Signe ce commit (inutile si commit.gpgsign vaut true) |
git tag -s v1.1.0 -m "…" | Crée un tag annoté signé |
git log --show-signature -1 | Affiche et vérifie la signature du dernier commit |
git verify-tag v1.1.0 | Vérifie la signature d'un tag |
Exercices
Exercice 1 sur 3 Le bon numéro de version Réussi À revoir
Sorbier Frais est en version 1.4.2. Donne le numéro de la version suivante dans chaque cas, en partant à chaque fois de 1.4.2.
- Correction du calcul des indemnités kilométriques.
- Ajout de l'export PDF.
- La route
GET /notesrenvoie maintenant un objet{ items, total }au lieu d'un tableau. - Correction d'une faute d'orthographe et ajout d'un filtre par service, livrés ensemble.
- Une préversion de test de la future version qui contiendra le changement 3.
Voir la réponseMasquer la réponse de l'exercice 1
1.4.3: correctif.1.5.0: nouvelle fonctionnalité compatible ; le correctif revient à 0.2.0.0: changement incompatible pour les clients de l'API ; mineur et correctif reviennent à 0.1.5.0: la version la plus haute l'emporte, une fonctionnalité nouvelle impose une version mineure.2.0.0-beta.1(ou2.0.0-rc.1), antérieure à2.0.0dans l'ordre SemVer.
Tu avais trouvé ?
Exercice 2 sur 3 Tags Réussi À revoir
- Crée un tag annoté
v1.1.0sur le commit courant avec le message « Export CSV et corrections », puis pousse-le. - Hugo clone le dépôt et veut tester la version
1.0.0sans rien modifier. Quelle commande ? - Il faut corriger un bug de la version
1.0.0, alors quemaincontient déjà le travail de la1.1.0. Quelles commandes créent la branche de correction et, une fois la correction commitée, la version1.0.1?
Voir la réponseMasquer la réponse de l'exercice 2
git tag -a v1.1.0 -m "Export CSV et corrections"puisgit push origin v1.1.0.git switch --detach v1.0.0(après ungit fetch --tagssi le tag est récent). Il est en HEAD détaché, ce qui convient pour tester ;git switch mainle ramène ensuite.git switch -c hotfix/1.0.1 v1.0.0, puis la correction et son commit, puisgit tag -a v1.0.1 -m "Version 1.0.1 : correction de …"etgit push origin hotfix/1.0.1 v1.0.1. La correction devra aussi être reportée dansmain(fusion de la branche ougit cherry-pick).
Tu avais trouvé ?
Exercice 3 sur 3 Rédiger le CHANGELOG Réussi À revoir
Depuis la version 1.1.0, ces pull requests ont été fusionnées : « feat: duplication d'une note » (#25), « fix: le total ignorait les péages » (#27), « chore: mise à jour des dépendances » (#28), « fix(sécurité): la route DELETE /notes/:id ne vérifiait pas le propriétaire » (#29), « docs: guide d'installation » (#30). Quel est le numéro de la nouvelle version ? Écris sa section du CHANGELOG, datée du 15 janvier 2027.
Voir la réponseMasquer la réponse de l'exercice 3
Une fonctionnalité nouvelle et compatible impose une version mineure : 1.2.0.
## [1.2.0] - 2027-01-15
### Ajouté
- Duplication d'une note de frais (#25).
### Corrigé
- Le total d'une note inclut désormais les frais de péage (#27).
### Sécurité
- Un utilisateur ne peut plus supprimer la note d'un autre utilisateur (#29).
La mise à jour des dépendances et le guide d'installation n'apportent rien de visible à l'utilisateur : on peut les omettre, ou les mentionner brièvement sous Modifié si une dépendance change le comportement.
Tu avais trouvé ?