Comment vérifier si une étiquette Git est la plus récente

GitGitBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à vérifier si une étiquette (tag) Git est la plus récente. Nous explorerons différentes méthodes pour déterminer l'étiquette la plus récente dans votre dépôt.

Vous commencerez par utiliser la commande git describe --tags pour trouver l'étiquette la plus récente accessible et comprendre le format de sa sortie. Ensuite, vous apprendrez à lister les étiquettes triées par version à l'aide de git tag --sort=-v:refname pour identifier facilement la plus récente étiquette. Enfin, vous pratiquerez le test d'anciennes étiquettes pour consolider votre compréhension de la façon dont Git gère l'historique des étiquettes.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BranchManagementGroup -.-> git/checkout("Switch Branches") git/BranchManagementGroup -.-> git/tag("Git Tags") subgraph Lab Skills git/add -.-> lab-560113{{"Comment vérifier si une étiquette Git est la plus récente"}} git/commit -.-> lab-560113{{"Comment vérifier si une étiquette Git est la plus récente"}} git/checkout -.-> lab-560113{{"Comment vérifier si une étiquette Git est la plus récente"}} git/tag -.-> lab-560113{{"Comment vérifier si une étiquette Git est la plus récente"}} end

Exécuter git describe --tags

Dans cette étape, nous apprendrons à utiliser la commande git describe --tags. Cette commande est très utile pour trouver l'étiquette (tag) la plus récente accessible depuis un commit. Elle est souvent utilisée pour nommer les commits d'une manière compréhensible par l'homme, en particulier pour les versions (releases).

Tout d'abord, assurons-nous que nous sommes dans le répertoire de notre projet. Ouvrez votre terminal et tapez :

cd ~/project/my-time-machine

Maintenant, créons quelques commits et étiquettes pour démontrer git describe --tags. Nous allons ajouter un nouveau fichier et effectuer un commit :

echo "This is the second message." > message2.txt
git add message2.txt
git commit -m "Add second message file"

Vous devriez voir une sortie similaire à celle-ci :

[master <commit-hash>] Add second message file
 1 file changed, 1 insertion(+)
 create mode 100644 message2.txt

Maintenant, ajoutons une étiquette à ce commit. Les étiquettes sont comme des étiquettes permanentes pour des points spécifiques dans l'historique de votre projet. Nous allons créer une étiquette légère nommée v1.0 :

git tag v1.0

Cette commande ne produit aucune sortie, mais elle a créé une étiquette pointant vers notre dernier commit.

Faisons un autre commit :

echo "This is the third message." > message3.txt
git add message3.txt
git commit -m "Add third message file"

Vous devriez voir une sortie similaire à celle-ci :

[master <commit-hash>] Add third message file
 1 file changed, 1 insertion(+)
 create mode 100644 message3.txt

Maintenant, exécutons git describe --tags :

git describe --tags

Vous devriez voir une sortie similaire à celle-ci :

v1.0-1-g<commit-hash>

Décortiquons cette sortie :

  • v1.0 : C'est le nom de l'étiquette la plus récente (v1.0) accessible depuis le commit actuel.
  • 1 : Ce nombre indique combien de commits ont été effectués depuis l'étiquette v1.0.
  • g<commit-hash> : Le g signifie "git" et les caractères suivants sont une forme abrégée du hachage du commit. Cela permet d'identifier de manière unique le commit.

Donc, v1.0-1-g<commit-hash> nous indique que le commit actuel est à un commit de l'étiquette v1.0.

Comprendre git describe --tags est utile pour identifier rapidement où vous en êtes dans l'historique de votre projet par rapport à vos étiquettes. Elle est particulièrement utile dans les processus de construction automatisée pour générer des noms de version.

Utiliser git tag --sort=-v:refname

Dans cette étape, nous apprendrons à lister nos étiquettes (tags) dans un ordre spécifique en utilisant la commande git tag --sort. Cela est utile lorsque vous avez de nombreuses étiquettes et que vous souhaitez les voir dans une séquence logique, par exemple par numéro de version.

Tout d'abord, assurons-nous que nous sommes dans le répertoire de notre projet :

cd ~/project/my-time-machine

Nous avons déjà une étiquette, v1.0. Ajoutons quelques autres étiquettes pour voir comment le tri fonctionne. Nous allons ajouter une étiquette pour le premier commit (là où nous avons créé message.txt). Pour ce faire, nous avons besoin du hachage du commit du premier commit. Vous pouvez le trouver en utilisant git log --oneline :

git log --oneline

Recherchez le premier message de commit, "Send a message to the future", et copiez le hachage court du commit à côté. Il ressemblera à quelque chose comme a1b2c3d.

Maintenant, créons une étiquette nommée v0.9 pointant vers ce premier commit. Remplacez <first-commit-hash> par le véritable hachage que vous avez trouvé :

git tag v0.9 <first-commit-hash>

Ajoutons une autre étiquette, v1.1, au commit actuel :

git tag v1.1

Maintenant, nous avons trois étiquettes : v0.9, v1.0 et v1.1. Si nous exécutons simplement git tag, elles peuvent ne pas apparaître dans l'ordre de version :

git tag

La sortie peut ressembler à ceci (l'ordre peut varier) :

v0.9
v1.0
v1.1

Pour lister les étiquettes dans l'ordre de version, nous pouvons utiliser git tag --sort=version. L'option -v:refname est une façon courante de trier les étiquettes en fonction de leur nom en utilisant un tri prenant en compte les versions. Le - avant -v:refname signifie trier dans l'ordre décroissant (la version la plus récente en premier).

Essayons-le :

git tag --sort=-v:refname

Vous devriez voir les étiquettes listées de la version la plus élevée à la plus basse :

v1.1
v1.0
v0.9

Ce tri est très utile lorsque vous gérez des versions (releases) et que vous souhaitez rapidement voir les versions les plus récentes de votre projet. L'option --sort est puissante et peut être utilisée avec d'autres critères également, mais le tri par nom de version est un cas d'utilisation courant pour les étiquettes.

Tester les anciennes étiquettes (tags)

Dans cette étape, nous allons explorer le comportement de git describe --tags lorsque nous ne sommes pas sur le dernier commit. Cela montre comment cette commande vous aide à comprendre votre position dans l'historique du projet par rapport à vos étiquettes.

Tout d'abord, assurez-vous que vous êtes dans le répertoire du projet :

cd ~/project/my-time-machine

Nous sommes actuellement sur le dernier commit, qui est étiqueté avec v1.1. Utilisons de nouveau git describe --tags pour confirmer :

git describe --tags

La sortie devrait être v1.1 car le commit actuel est exactement là où pointe l'étiquette v1.1.

Maintenant, revenons au commit où nous avons créé l'étiquette v1.0. Nous pouvons utiliser git checkout suivi du nom de l'étiquette pour cela.

git checkout v1.0

Vous verrez une sortie indiquant que vous êtes dans un état de « tête détachée » ('detached HEAD'). Ne vous inquiétez pas pour l'instant ; cela signifie simplement que vous regardez un commit spécifique plutôt que la pointe d'une branche.

Note: switching to 'v1.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command (for example,
'git switch -c <new-branch-name>'). Or, if you meant to switch to a number
of commits past an existing branch, what you probably want is to use
'git switch <branch-name>~<number>'.

Switched to a new branch 'v1.0'

Maintenant que nous sommes au commit étiqueté v1.0, exécutons de nouveau git describe --tags :

git describe --tags

La sortie devrait simplement être :

v1.0

C'est parce que le commit actuel est exactement là où se trouve l'étiquette v1.0. Il n'y a pas de commits entre la position actuelle et l'étiquette v1.0.

Essayons de revenir au commit où nous avons créé l'étiquette v0.9 :

git checkout v0.9

Encore une fois, vous verrez le message de tête détachée.

Maintenant, exécutez git describe --tags :

git describe --tags

La sortie devrait être similaire à :

v0.9

Cela confirme que git describe --tags identifie correctement l'étiquette la plus proche à partir de votre position actuelle dans l'historique des commits. Cette capacité à décrire les commits par rapport aux étiquettes est très utile pour comprendre l'état de votre projet à différents moments.

Pour revenir au dernier commit de la branche master, vous pouvez utiliser :

git checkout master

Vous devriez voir une sortie indiquant que vous êtes revenu sur la branche master :

Switched to branch 'master'
Your branch is up to date with 'origin/master'.

Résumé

Dans ce laboratoire (lab), nous avons appris à vérifier si une étiquette (tag) Git est la plus récente en utilisant différentes méthodes. Nous avons commencé par explorer la commande git describe --tags, qui permet d'identifier l'étiquette la plus récente accessible depuis un commit et fournit des informations sur le nombre de commits depuis cette étiquette ainsi qu'un hachage court du commit. Cette commande est utile pour comprendre la relation entre le commit actuel et l'étiquette la plus proche.

Nous avons également appris à utiliser git tag --sort=-v:refname pour lister les étiquettes dans l'ordre décroissant en fonction de leur numéro de version, ce qui nous permet d'identifier facilement la plus récente étiquette par son nom. Enfin, nous avons exploré comment tester les anciennes étiquettes pour comprendre le comportement de git describe --tags lorsque nous ne sommes pas sur le dernier commit. Ces techniques constituent des outils précieux pour gérer et comprendre les étiquettes au sein d'un dépôt Git.