Ce n'est pas une question que j'envisage de poser séparément, mais je me demande pourquoi git tag( -nou une autre option ...) n'affiche pas les hachages de validation en premier lieu. C'est bien de voir quelles solutions les gens proposent, mais je considère cela comme un défaut de conception dans les options disponibles.
andreee
Réponses:
142
Pour obtenir des balises git avec le hachage SHA1 de l'objet Tag, vous pouvez exécuter:
git show-ref --tags
La sortie ressemblera alors à quelque chose comme:
Notez que cela ne fera pas la différence entre les balises légères et annotées. Pour les balises légères, il affichera le commit et pour les balises annotées, le hachage de l'objet tag lui-même.
Lily Ballard
20
Pour afficher une liste de balises avec des références déréférencées (en cas de balises annotées), utilisez git show-ref --tags -d. Les balises déréférencées sont postfixées avec un ^{}.
S. Christoffer Eliesen
49
La git tagcommande est sous-développée. Beaucoup est souhaité mais manquant, comme les détails complets des balises et les balises dans l'ordre de l'historique de validation.
J'aime plutôt ça, qui donne exactement ce que je veux mais je ne peux pas obtenir de git tag:
git log --oneline --decorate --tags --no-walk
Cela donne une très belle vue codée par couleur des balises dans l'ordre chronologique inverse (comme ce serait dans le journal complet). De cette façon, non seulement vous voyez les balises, mais vous verrez également les hachages abrégés et les messages de validation des validations de balise.
Vous pouvez utiliser d'autres formats de date dans l' --dateoption ainsi que contrôler entièrement la sortie pour correspondre à votre goût unique dans l' --prettyoption. Les deux options sont bien documentées dans la documentation de git-log .
Bien que ce ne soit pas ce que l'OP a demandé (afficher les hachages de validation sha1 ), c'est très utile car les messages de validation peuvent également être utiles. +1 de moi.
Stelios Adamantidis
2
@nealmcb git logest puissant! Vous pouvez lui faire montrer exactement ce que vous voulez. Essayez git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'. D'autres formats de date sont également possibles. Recherchez simplement --datedans la page d'aide. J'ai mis à jour ma réponse pour inclure cette option.
ADTC
1
@SteliosAdamantidis En fait, ma réponse donne les hachages SHA1 abrégés (7 premiers caractères), et si vous voulez des hachages complets, vous pouvez toujours le modifier avec --prettyet %H. Merci pour le +1 :)
ADTC
15
Les balises annotées ont leur propre SHA − 1, nous devons donc les déréférencer. Cependant, les balises légères ne peuvent pas être déréférencées, car elles pointent déjà vers un commit. Pour résoudre, nous devons lister les deux et filtrer les objets de commit:
L'utilisation git log --tags --oneline --no-walkdéférera également automatiquement les balises annotées. :)
ADTC
11
Pour obtenir le SHA1 référencé par toute sorte de ref (branche, balise ...), utilisez git rev-parse:
git rev-parse tag1^0 tag2^0
Il n'imprimera que les SHA1 complets, sur des lignes séparées. Le ^0suffixe est une syntaxe spéciale, pour s'assurer que cela affichera le SHA1 du commit pointé par la balise, qu'il soit annoté ou non. (Les balises annotées sont des objets à part entière, qui contiennent un pointeur vers un commit ainsi que des métadonnées. Si vous savez qu'une balise est annotée et que vous souhaitez que le SHA1 de la balise soit désactivé, laissez simplement^0 .)
Bien sûr, vous ne devriez pas souvent avoir besoin de le faire, car toute commande Git qui accepterait un SHA1 devrait également accepter une balise!
Meilleure réponse ici, merci @Jefromi. Notez que dans un shell cmd Windows, toute commande git utilisant ^ doit être citée: par exemple git rev-parse "tag1 ^ 0" "tag2 ^ 0".
yoyo
8
J'avais une question similaire, mais je voulais le hachage de (plusieurs) balises spécifiques. J'ai trouvé que "show-ref" prendra une liste de balises, donc cela fait le travail:
Cependant, quelques expériences avec "git show" ont abouti à cette commande:
% git show --summary --oneline --decorate v3.4.0.13-ga v3.4.0.13-base
79ba365 (tag: v3.4.0.13-ga, rhins013a) commit message the first
bfc7747 (tag: v3.4.0.13-base) commit message the second
Comme je suis beaucoup plus habitué à utiliser "show" que "show-ref", je trouve ce dernier plus facile à retenir et plus utile aussi.
Les tags doivent être signés et / ou envoyés par message. Les balises légères n'ont pas d'objets SHA1 et ne sont que des références. Sinon, essayez git show.
Excellente solution. Si vous préférez avoir Only tagenames au lieu du refname complet, vous pouvez changer d'utilisation %(refname:short)au lieu de %(refname).
Radon8472
2
J'ai pris la commande du poste de techtonik anatoly ajouté le message de titre des balises / commits et l' comme de jolis cols.
Le résultat est une sortie identique à git tag -nmais avec commit-hash comme préfixe.
git tag
(-n
ou une autre option ...) n'affiche pas les hachages de validation en premier lieu. C'est bien de voir quelles solutions les gens proposent, mais je considère cela comme un défaut de conception dans les options disponibles.Réponses:
Pour obtenir des balises git avec le hachage SHA1 de l'objet Tag, vous pouvez exécuter:
La sortie ressemblera alors à quelque chose comme:
Chaque ligne est le hachage SHA1 de la balise, suivi du nom de la balise précédé du préfixe
refs/tags/
.Si vous voulez le hachage SHA1 du commit, au lieu de l'objet tag, vous pouvez exécuter:
Cela produira une sortie comme:
Les lignes se terminant par
^{}
commencent par le hachage SHA1 du commit réel vers lequel pointe la balise.la source
git show-ref --tags -d
. Les balises déréférencées sont postfixées avec un^{}
.La
git tag
commande est sous-développée. Beaucoup est souhaité mais manquant, comme les détails complets des balises et les balises dans l'ordre de l'historique de validation.J'aime plutôt ça, qui donne exactement ce que je veux mais je ne peux pas obtenir de
git tag
:Cela donne une très belle vue codée par couleur des balises dans l'ordre chronologique inverse (comme ce serait dans le journal complet). De cette façon, non seulement vous voyez les balises, mais vous verrez également les hachages abrégés et les messages de validation des validations de balise.
Je l'ai aliasé
git t
etgit tags
comme suit:Remarque: j'ai dû utiliser la redirection bash
git t
car Git ne prend pas en charge l'appel d'un alias à partir d'un autre alias (ce qui est décevant).Si vous voulez voir la date et l'heure de validation, essayez:
Vous pouvez utiliser d'autres formats de date dans l'
--date
option ainsi que contrôler entièrement la sortie pour correspondre à votre goût unique dans l'--pretty
option. Les deux options sont bien documentées dans la documentation de git-log .la source
git log
est puissant! Vous pouvez lui faire montrer exactement ce que vous voulez. Essayezgit log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'
. D'autres formats de date sont également possibles. Recherchez simplement--date
dans la page d'aide. J'ai mis à jour ma réponse pour inclure cette option.--pretty
et%H
. Merci pour le +1 :)Les balises annotées ont leur propre SHA − 1, nous devons donc les déréférencer. Cependant, les balises légères ne peuvent pas être déréférencées, car elles pointent déjà vers un commit. Pour résoudre, nous devons lister les deux et filtrer les objets de commit:
Résultat avec des balises légères:
Résultat avec des balises annotées:
la source
git log --tags --oneline --no-walk
déférera également automatiquement les balises annotées. :)Pour obtenir le SHA1 référencé par toute sorte de ref (branche, balise ...), utilisez
git rev-parse
:Il n'imprimera que les SHA1 complets, sur des lignes séparées. Le
^0
suffixe est une syntaxe spéciale, pour s'assurer que cela affichera le SHA1 du commit pointé par la balise, qu'il soit annoté ou non. (Les balises annotées sont des objets à part entière, qui contiennent un pointeur vers un commit ainsi que des métadonnées. Si vous savez qu'une balise est annotée et que vous souhaitez que le SHA1 de la balise soit désactivé, laissez simplement^0
.)Bien sûr, vous ne devriez pas souvent avoir besoin de le faire, car toute commande Git qui accepterait un SHA1 devrait également accepter une balise!
la source
J'avais une question similaire, mais je voulais le hachage de (plusieurs) balises spécifiques. J'ai trouvé que "show-ref" prendra une liste de balises, donc cela fait le travail:
Cependant, quelques expériences avec "git show" ont abouti à cette commande:
Comme je suis beaucoup plus habitué à utiliser "show" que "show-ref", je trouve ce dernier plus facile à retenir et plus utile aussi.
Voir aussi le joli résumé dans Comment savoir sur quel commit une balise pointe dans Git? .
la source
Les tags doivent être signés et / ou envoyés par message. Les balises légères n'ont pas d'objets SHA1 et ne sont que des références. Sinon, essayez
git show
.la source
Cela donne une liste de tous les commits pour les balises. Les balises annotées sont déréférencées. Envoyez vos remerciements ici .
la source
%(refname:short)
au lieu de%(refname)
.J'ai pris la commande du poste de techtonik anatoly ajouté le message de titre des balises / commits et l' comme de jolis cols.
Le résultat est une sortie identique à
git tag -n
mais avec commit-hash comme préfixe.Si vous préférez avoir le hachage long au lieu du court, remplacez-le
objectname:short
parobjectname
.la source