TLDR non annoté: commit; annoté: commit, auteur, date, (facultatif) commentaire
Antony Hatchkins
Réponses:
255
TL; DR
La différence entre les commandes est que l'une vous fournit un message d'étiquette tandis que l'autre ne le fait pas. Une balise annotée a un message qui peut être affiché avec git-show (1), tandis qu'une balise sans annotations n'est qu'un pointeur nommé vers une validation.
En savoir plus sur les balises légères
Selon la documentation : "Pour créer une balise légère, ne fournissez aucune des options -a, -s ou -m, indiquez simplement un nom de balise". Il existe également différentes options pour écrire un message sur des balises annotées:
Lorsque vous utilisez git tag <tagname>, Git créera une balise à la révision actuelle mais ne vous demandera pas d'annotation. Il sera marqué sans message (il s'agit d'une balise légère).
Lorsque vous utilisez git tag -a <tagname>, Git vous demandera une annotation sauf si vous avez également utilisé l'indicateur -m pour fournir un message.
Lorsque vous utilisez git tag -a -m <msg> <tagname>, Git marquera le commit et l'annotera avec le message fourni.
Lorsque vous utilisez git tag -m <msg> <tagname>, Git se comportera comme si vous aviez passé l'indicateur -a pour l'annotation et utiliser le message fourni.
Fondamentalement, cela revient à savoir si vous souhaitez que la balise ait une annotation et d'autres informations associées ou non.
Existe-t-il une différence entre une balise "annotation" et un message de validation?
Steve Bennett
3
@SteveBennett Oui. Une annotation de balise n'est pas un message de validation. Vous ne pouvez pas le voir avec git-log (1); vous devez utiliser git-show (1).
Todd A. Jacobs
115
La différence entre les balises "annotées" et "légères" va au-delà du message. Vous pouvez avoir une balise annotée sans message ( git tag -a <tag> -m ''), mais une balise annotée a toujours un tagueur (auteur) et une date .
Piotr Findeisen
1
Pareil pour moi. Les balises de version ont généralement des messages assez inutiles (peut-il en dire plus que le nom? Pourquoi?). Malheureusement, cette réponse la plus votée ne mentionne pas cette différence.
Piotr Findeisen
44
Une autre chose importante à noter est que lorsque vous poussez vos balises vers un référentiel distant en utilisant git push --follow-tags, seules les balises annotées seront poussées.
Xatoo
209
Poussez les balises annotées, gardez la légèreté locale
man git-tag dit:
Les balises annotées sont destinées à la publication tandis que les balises légères sont destinées aux étiquettes d'objets privés ou temporaires.
Et certains comportements les différencient de manière à ce que cette recommandation soit utile, par exemple:
Les balises annotées peuvent contenir un message, un créateur et une date différents de la validation vers laquelle ils pointent. Vous pouvez donc les utiliser pour décrire une version sans effectuer de validation de version.
Les balises légères n'ont pas ces informations supplémentaires et n'en ont pas besoin, car vous ne les utiliserez que vous-même pour développer.
C'est beaucoup plus clair que la réponse actuellement acceptée. Merci.
Reece
43
La grande différence est parfaitement expliquée ici .
Fondamentalement, les balises légères ne sont que des pointeurs vers des validations spécifiques. Aucune autre information n'est enregistrée ; d'autre part, les balises annotées sont des objets normaux , qui ont un auteur et une date et peuvent être référencés car ils ont leur propre clé SHA.
Si savoir qui a marqué quoi et quand est pertinent pour vous, utilisez des balises annotées. Si vous souhaitez simplement marquer un point spécifique de votre développement , peu importe qui et quand l'a fait, les balises légères sont suffisantes.
Normalement, vous opterez pour des balises annotées, mais cela dépend vraiment du maître Git du projet.
Réponses:
TL; DR
La différence entre les commandes est que l'une vous fournit un message d'étiquette tandis que l'autre ne le fait pas. Une balise annotée a un message qui peut être affiché avec git-show (1), tandis qu'une balise sans annotations n'est qu'un pointeur nommé vers une validation.
En savoir plus sur les balises légères
Selon la documentation : "Pour créer une balise légère, ne fournissez aucune des options -a, -s ou -m, indiquez simplement un nom de balise". Il existe également différentes options pour écrire un message sur des balises annotées:
git tag <tagname>
, Git créera une balise à la révision actuelle mais ne vous demandera pas d'annotation. Il sera marqué sans message (il s'agit d'une balise légère).git tag -a <tagname>
, Git vous demandera une annotation sauf si vous avez également utilisé l'indicateur -m pour fournir un message.git tag -a -m <msg> <tagname>
, Git marquera le commit et l'annotera avec le message fourni.git tag -m <msg> <tagname>
, Git se comportera comme si vous aviez passé l'indicateur -a pour l'annotation et utiliser le message fourni.Fondamentalement, cela revient à savoir si vous souhaitez que la balise ait une annotation et d'autres informations associées ou non.
la source
git tag -a <tag> -m ''
), mais une balise annotée a toujours un tagueur (auteur) et une date .git push --follow-tags
, seules les balises annotées seront poussées.Poussez les balises annotées, gardez la légèreté locale
man git-tag
dit:Et certains comportements les différencient de manière à ce que cette recommandation soit utile, par exemple:
Les balises annotées peuvent contenir un message, un créateur et une date différents de la validation vers laquelle ils pointent. Vous pouvez donc les utiliser pour décrire une version sans effectuer de validation de version.
Les balises légères n'ont pas ces informations supplémentaires et n'en ont pas besoin, car vous ne les utiliserez que vous-même pour développer.
git describe
sans options de ligne de commande ne voit que les balises annotéesDifférences internes
les balises légères et annotées sont un fichier sous
.git/refs/tags
qui contient un SHA-1pour les balises légères, le SHA-1 pointe directement vers un commit:
imprime la même chose que le SHA-1 de la TETE.
Il n'est donc pas étonnant qu'ils ne puissent pas contenir d'autres métadonnées.
les balises annotées pointent vers un objet balise dans la base de données d'objets.
contient le SHA de l'objet balise annoté:
puis nous pouvons obtenir son contenu avec:
exemple de sortie:
Et c'est ainsi qu'il contient des métadonnées supplémentaires. Comme nous pouvons le voir sur la sortie, les champs de métadonnées sont:
Une analyse plus détaillée du format est présentée à: Quel est le format d'un objet tag git et comment calculer son SHA?
Bonus
Déterminez si une balise est annotée:
Les sorties
commit
pour léger, puisqu'il n'y a pas d'objet tag, il pointe directement sur le committag
pour annoté, car il y a un objet tag dans ce casAfficher uniquement les balises légères: comment répertorier toutes les balises légères?
la source
La grande différence est parfaitement expliquée ici .
Fondamentalement, les balises légères ne sont que des pointeurs vers des validations spécifiques. Aucune autre information n'est enregistrée ; d'autre part, les balises annotées sont des objets normaux , qui ont un auteur et une date et peuvent être référencés car ils ont leur propre clé SHA.
Si savoir qui a marqué quoi et quand est pertinent pour vous, utilisez des balises annotées. Si vous souhaitez simplement marquer un point spécifique de votre développement , peu importe qui et quand l'a fait, les balises légères sont suffisantes.
Normalement, vous opterez pour des balises annotées, mais cela dépend vraiment du maître Git du projet.
la source