alors le git tag
commande liste les balises git actuelles
tag1
tag2
git tag -n
affiche le message de la balise
tag1 blah blah
tag2 blah blah
Quelle est la meilleure façon d'obtenir le hachage de tag1 & tag2?
Que dis-tu de ça?
git show-ref --tags
La commande git tag
Est sous-développée. Beaucoup est souhaité mais manquant, comme les détails complets des balises et les balises dans l'ordre d'historique de validation.
J'aime plutôt cela, ce qui donne exactement ce que je veux mais 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 étiquettes dans l'ordre chronologique inverse (comme ce serait le cas dans le journal complet). De cette façon, non seulement vous voyez les balises, vous verrez également les hachages abrégés et les messages de validation des validations de balises.
Je l'ai aliasé en git t
et git tags
comme suit:
git config --global alias.tags "log --oneline --decorate --tags --no-walk"
git config --global alias.t "!git tags"
Remarque: J'ai dû utiliser la redirection bash pour git t
Comme Git ne le fait pas ' t supporte l'appel d'un alias à partir d'un autre alias (qui est une déception).
Si vous souhaitez voir la date et l'heure de validation, essayez:
git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'
Vous pouvez utiliser d'autres formats de date dans l'option --date
Ainsi que contrôler entièrement la sortie pour correspondre à votre goût unique dans l'option --pretty
. Les deux options sont bien documentées dans la git-log Documentation .
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 une validation. Pour résoudre, nous devons lister les deux et filtrer les objets de commit:
git for-each-ref --sort -v:refname --format '%(objectname) %(objecttype) %(refname)
%(*objectname) %(*objecttype) %(*refname)' refs/tags | grep commit
Résultat avec des balises légères:
589610a0114a375f1bff716dd308cf8df08571d3 commit refs/tags/1.4.9
e25952a74bf379783944bef9c4fcc60600cb764c commit refs/tags/1.4.8
19b1c2c96a9678837f57eac86cf3d22842731510 commit refs/tags/1.4.7
7208212a55c4a56af34da781a7f730d6ddd557a1 commit refs/tags/1.4.6
62ec20337a4125496bd4f56288f3283963153194 commit refs/tags/1.4.5
Résultat avec des balises annotées:
e2b2d6a172b76d44cb7b1ddb12ea5bfac9613a44 commit refs/tags/v2.11.0-rc3^{}
1310affe024fba407bff55dbe65cd6d670c8a32d commit refs/tags/v2.11.0-rc2^{}
3ab228137f980ff72dbdf5064a877d07bec76df9 commit refs/tags/v2.11.0-rc1^{}
1fe8f2cf461179c41f64efbd1dc0a9fb3b7a0fb1 commit refs/tags/v2.11.0-rc0^{}
454cb6bd52a4de614a3633e4f547af03d5c3b640 commit refs/tags/v2.11.0^{}
Pour obtenir le SHA1 référencé par n'importe quel type de référence (branche, tag ...), utilisez git rev-parse
:
git rev-parse tag1^0 tag2^0
Il n'imprimera que les SHA1 complets, sur des lignes distinctes. Le ^0
le suffixe est une syntaxe spéciale, pour garantir qu'il 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 une validation ainsi que des métadonnées. Si vous savez qu'une balise est annotée et que vous souhaitez que la balise SHA1, laissez simplement le ^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!
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:
% git show-ref v3.4.0.13-ga v3.4.0.13-base
bfc7747c4cf67a4aacc71d7a40337d2c3f73a886 refs/tags/v3.4.0.13-base
79ba365e75a4f9cee074d25a605a26acb660b7de refs/tags/v3.4.0.13-ga
Cependant, certaines expérimentations 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 familier avec l'utilisation de "show" que de "show-ref", je trouve ce dernier plus facile à retenir et plus utile aussi.
Voir aussi le résumé de Nice dans Comment savoir à quel commit un tag pointe dans Git? .
Les balises doivent être signées et/ou envoyées par messagerie. Les balises légères n'ont pas d'objets SHA1 et ne sont que des références. Sinon, essayez git show
.
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)' refs/tags
Cela donne une liste de tous les commits pour les balises. Les balises annotées sont déréférencées. Envoyez merci ici .
J'ai pris la commande de anatoly techtonik post a ajouté le message titre des tags/commits et l'a formaté en tant que Nice cols.
Le résultat est une sortie identique à git tag -n
mais avec commit-hash comme préfixe.
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname:short)%(else)%(objectname:short)%(end)|%(refname:short)|%(contents:subject)' refs/tags | column -t -s '|'
Si vous aimez avoir le hachage long au lieu du court, remplacez _objectname:short
par objectname
.