Tags

Dans ce document, nous verrons le concept de tags Git et la commande git tag. Les tags sont des réfs qui pointent vers des emplacements spécifiques de l'historique Git. Les tags sont généralement utilisés pour capturer un point de l'historique utilisé pour une version marquée (c.-à-d., v1.0.1). Un tag est similaire à une branche qui ne change pas. Contrairement aux branches, après leur création, les tags ne possèdent plus d'historique des commits. ¨Pour en savoir plus sur les branches, consultez la page git branch. Ce document aborde les différents types de tags, comment créer des tags, les répertorier, les supprimer, les partager, et bien plus.

Créer un tag

Pour créer un tag, exécutez la commande suivante :

 git tag  

Replacez par un identifiant sémantique à l'état du dépôt au moment de la création du tag. Un schéma courant consiste à utiliser des numéros de version, comme git tag v1.4. Git prend en charge deux types de tags différents : annotés et légers. Dans l'exemple précédent, nous avons créé un tag léger. Les tags légers et les tags annotés diffèrent dans la quantité de métadonnées associées qui sont stockées. Une bonne pratique consiste à considérer les tags annotés comme publics et les tags légers, comme privés. Les tags annotés stockent des métadonnées supplémentaires, comme : le nom du créateur du tag, son e-mail et la date. Ces données sont importantes pour une version publique. Les tags légers sont des « signets » associés à un commit. Ce ne sont rien de plus qu'un nom et un pointeur vers un commit. Ils sont utiles pour créer des liens rapides vers des commits pertinents.

Tags annotés

Les tags annotés sont stockés comme des objets complets dans la base de données Git. Pour rappel, ils stockent des métadonnées supplémentaires, comme : le nom du créateur du tag, son e-mail et la date. À l'instar des commits et des messages de commit, les tags annotés possèdent un message de tag. En outre, pour des raisons de sécurité, les tags annotés peuvent être signés et vérifiés grâce à GNU Privacy Guard (GPG). Bonne pratique recommandée : pour Git, préférez les tags annotés aux tags légers pour bénéficier de toutes les métadonnées associées.

 git tag -a v1.4 

Lorsque vous exécutez cette commande, vous créez un tag annoté identifié par v1.4. La commande ouvre ensuite l'éditeur de texte par défaut configuré et invite à saisir des métadonnées supplémentaires.

 git tag -a v1.4 -m "my version 1.4" 

Cette commande est similaire à l'appel précédent. Cependant, cette version est transmise avec l'option -m et un message. Cette méthode pratique rappelle git commit -m. Elle crée immédiatement un tag et annule l'ouverture de l'éditeur de texte local. À la place, elle enregistre le message transmis grâce à l'option -m.

Tags légers

 git tag v1.4-lw 

Cette commande crée un tag léger identifié par v1.4-lw. Les tags légers sont créés sans l'option -a, -s ou -m. Ils créent une somme de contrôle de tag et le stockent dans le répertoire .git/ du dépôt de projet.

Répertorier les tags

Pour répertorier les tags stockés dans un dépôt, exécutez la commande suivante :

 git tag 

Une liste des tags sera alors générée :

 v0.10.0 v0.10.0-rc1 v0.11.0 v0.11.0-rc1 v0.11.1 v0.11.2 v0.12.0 v0.12.0-rc1 v0.12.1 v0.12.2 v0.13.0 v0.13.0-rc1 v0.13.0-rc2 

Pour affiner la liste des tags, vous pouvez transmettre l'option -l avec une expression générique :

 $ git tag -l *-rc* v0.10.0-rc1 v0.11.0-rc1 v0.12.0-rc1 v0.13.0-rc1 v0.13.0-rc2 v0.14.0-rc1 v0.9.0-rc1 v15.0.0-rc.1 v15.0.0-rc.2 v15.4.0-rc.3 

L'exemple précédent utilise l'option -l et une expression générique de -rc qui renvoie une liste de tous les tags marqués par le préfixe -rc, traditionnellement utilisé pour identifier les candidats à la livraison.

Taguer d'anciens commits

Les exemples de tag précédents montrent des opérations sur des commits implicites. Par défaut, git tag crée un tag sur le commit référencé par HEAD. Sinon, git tag peut être transmise en tant que réf à un commit spécifique. Le commit transmis est alors tagué, et non défini par défaut sur HEAD. Pour collecter une liste d'anciens commits, exécutez la commande git log.

 $ git log --pretty=oneline 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'feature' a6b4c97498bd301d84096da251c98a07c7723e65 add update method for thing 0d52aaab4479697da7686c15f77a3d64d9165190 one more thing 6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment' 

Lorsque vous exécutez git log, vous générez une liste de commits. Dans cet exemple, nous sélectionnons le commit le plus élevé, Merge branch 'feature' pour le nouveau tag. Nous devons faire une référence à l'empreinte SHA du commit pour la transmettre à Git :

 git tag -a v1.2 15027957951b64cf874c3557a0f3547bd83b3ff6 

Lorsque vous appelez git tag comme indiqué ci-dessus, vous créez un commit annoté identifié par v1.2 pour le commit sélectionné dans l'exemple git log précédent.

Taguer de nouveau/Remplacer d'anciens tags

Si vous essayez de créer un tag portant le même identifiant qu'un tag existant, Git renvoie une erreur comme celle-ci :

 fatal: tag 'v0.4' already exists 

En outre, si vous essayez de taguer un ancien commit avec un identifiant de tag existant, Git renvoie la même erreur.

Si vous devez mettre à jour un tag existant, vous devez utiliser l'option -f (FORCER).

 git tag -a -f v1.4 15027957951b64cf874c3557a0f3547bd83b3ff6 

Lorsque vous exécutez la commande ci-dessus, vous mappez le commit 15027957951b64cf874c3557a0f3547bd83b3ff6 à l'identifiant de tag v1.4. Tout contenu existant pour le tag v1.4 est écrasé.

Partage : faire un push de tags vers un dépôt distant

Le partage de tags est similaire au push de branches. Par défaut, git push ne fait pas de push de tags. Les tags doivent être explicitement transmis à git push.

 $ git push origin v1.4 Counting objects: 14, done. Delta compression using up to 8 threads. Compressing objects: 100% (12/12), done. Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done. Total 14 (delta 3), reused 0 (delta 0) To git@bitbucket.com:atlasbro/gittagdocs.git * [new tag] v1.4 -> v1.4 

Pour faire un push de plusieurs tags simultanément, transmettez l'option --tags à la commande git push. Lorsqu'un autre utilisateur clone un dépôt ou en fait un pull, il reçoit les nouveaux tags.

Faire un check-out de tags

Vous pouvez consulter l'état d'un dépôt à un tag donné en utilisant la commande git checkout.

 git checkout v1.4 

La commande ci-dessus fait un check-out du tag v1.4. Le dépôt se retrouve alors à l'état HEAD détaché. Cela signifie que tout changement apporté ne mettra pas à jour le tag. Il créera un commit détaché. Ce nouveau commit détaché ne fera pas partie d'une branche et sera seulement joignable en utilisant l'empreinte SHA du commit. Par conséquent, il est recommandé de créer une branche dès que vous apportez des changements à un état HEAD détaché.

Supprimer des tags

La suppression de tags est une opération simple. Transmettez l'option -d et un identifiant de tag à git tag pour supprimer le tag identifié.

 $ git tag v1 v2 v3 $ git tag -d v1 $ git tag v2 v3 

Dans cet exemple git tag est exécutée pour afficher une liste de tags montrant v1, v2 et v3. Ensuite, git tag -d v1 est exécutée pour supprimer le tag v1.

Résumé

Pour résumer, le tag est un mécanisme supplémentaire permettant de créer un instantané d'un dépôt Git. Les tags sont généralement utilisés pour créer des identifiants sémantiques de numéro de version correspondant aux cycles de livraison de logiciels. La commande git tag est le principal moyen pour créer, modifier et supprimer des tags. Il existe deux types de tags : annotés et légers. Les tags annotés sont généralement recommandés, car ils stockent de précieuses métadonnées supplémentaires sur le tag. Dans ce document, nous avons couvert des commandes Git supplémentaires : git push et git checkout. Consultez leurs pages dédiées pour découvrir leur utilisation étendue.

Prêt à découvrir Git ?

Essayez ce tutoriel interactif.

Démarrez maintenant