Réponses:
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:
0e76920bea4381cfc676825f3143fdd5fcf8c21f refs/tags/1.0.0
5ce9639ead3a54bd1cc062963804e5bcfcfe1e83 refs/tags/1.1.0
591eceaf92f99f69ea402c4ca639605e60963ee6 refs/tags/1.2.0
40414f41d0fb89f7a0d2f17736a906943c05acc9 refs/tags/1.3.0
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:
git show-ref --tags -d
Cela produira une sortie comme:
0e76920bea4381cfc676825f3143fdd5fcf8c21f refs/tags/1.0.0
3e233dd8080617685992dc6346f739a6f6396aae refs/tags/1.0.0^{}
5ce9639ead3a54bd1cc062963804e5bcfcfe1e83 refs/tags/1.1.0
09173980152a7ed63d455829553448ece76c6fdc refs/tags/1.1.0^{}
591eceaf92f99f69ea402c4ca639605e60963ee6 refs/tags/1.2.0
56d803caaa8a93a040b7be0b8a36abdc4ce8c509 refs/tags/1.2.0^{}
40414f41d0fb89f7a0d2f17736a906943c05acc9 refs/tags/1.3.0
1bdf628a70fda7a0d840c52f3abce54b1c6b0130 refs/tags/1.3.0^{}
Les lignes se terminant par ^{}
commencent par le hachage SHA1 du commit réel vers lequel pointe la balise.
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
:
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.
Je l'ai aliasé 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 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:
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' --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 .
git log
est 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 --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:
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^{}
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
:
git rev-parse tag1^0 tag2^0
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!
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, 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.
Voir aussi le joli résumé dans Comment savoir sur quel commit une balise pointe dans Git? .
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
.
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 vos remerciements ici .
%(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.
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 préférez avoir le hachage long au lieu du court, remplacez-le objectname:short
par objectname
.
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.