Obtenez l'heure et la date des balises git

88

J'ai un projet qui utilise git et j'ai marqué toutes les versions avec une balise.

$ git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.1.0

Mon objectif est de lister les sorties et les dates de sortie dans une interface web (tag / date de validation = date de sortie). Actuellement, nous listons toutes les versions en utilisant git tag.

Comment puis-je obtenir l'heure et la date auxquelles la balise a été créée (ou le commit vers lequel elle pointe)?

HNygard
la source
2
Il est bon de préciser ici que c'est la date de validation de la balise que vous recherchez. Comme une balise n'a pas de date.
jobwat
1
@jobwat balises annotées faire une date .
chrstphrchvz

Réponses:

71

Utilisez l' --formatargument pour git log:

git log -1 --format=%ai MY_TAG_NAME
user4815162342
la source
3
CONSEIL - Remplacez "TAG" par le nom de la balise. Par exemple git log -1 --format=%ai v0.2.3,.
Tobias
5
Si vous voulez ISO8601, faites --format=%aI(majuscule "I")
Chaim Eliyah
git log -1 --format=%ai MY_TAG_NAME | catdésactiver la vue de la page
elinx
Que fait "-1"?
Blademaster
@Blademaster Il dit git logde ne montrer qu'un seul commit, celui appartenant à la balise. Le comportement par défaut est d'afficher toutes les validations de celle spécifiée à la première validation dans le référentiel.
user4815162342
83

Cela a toujours fonctionné pour moi:

git log --tags --simplify-by-decoration --pretty="format:%ci %d"

Consultez la section "PRETTY FORMATS" de la page de manuel git-log pour plus de détails sur la chaîne de format si vous souhaitez un formatage de date différent.

Nikos C.
la source
13
Pour être averti cependant, cela listera la date / heure de validation, mais pas la date / heure de la balise annotée.
WiSaGaN
5
Mettez simplement taglog = log --tags --simplify-by-decoration --pretty='format:%ci %d'(notez les guillemets simples, PAS les guillemets doubles) dans la section [alias] de votre fichier .gitconfig, et maintenant vous avez une commande git taglog :)
Lambart
40

Une autre option:

git for-each-ref --format="%(refname:short) | %(creatordate)" "refs/tags/*"

Voir https://git-scm.com/docs/git-for-each-ref#_field_names pour les options de format

%(creatordate) donne la date du commit pointé, pour voir la date à laquelle le tag a été créé lors de l'utilisation %(taggerdate)

Vous pouvez incorporer directement le shell:

$> git for-each-ref --shell --format="ref=%(refname:short) dt=%(taggerdate:format:%s)" "refs/tags/*"

ref='v1.10' dt='1483807817'
ref='v1.11' dt='1483905854'
ref='v1.12.0' dt='1483974797'
ref='v1.12.1' dt='1484015966'
ref='v1.13' dt='1484766542'
ref='v1.2' dt='1483414377'
ref='v1.3' dt='1483415058'
ref='v1.3-release' dt='' <-- not an annotated tag, just a pointer to a commit so no 'taggerdate', it would have a 'creator date'.
ref='v1.3.1' dt='1483487085'
ref='v1.4' dt='1483730146'
ref='v1.9' dt='1483802985'
non séquestre
la source
3
C'est la meilleure réponse pour obtenir la date du tag.
Joseph K. Strauss
Alternativement, vous pouvez obtenir l'horodatage unix avec git for-each-ref --format="%(taggerdate:unix)" refs/tagsou comme sous-chaîne dansgit for-each-ref --format="%(taggerdate:raw)" refs/tags
RD
1
Merci! Toutes les autres réponses donnent simplement la date de validation et non la date du tag.
Sam
Oui, c'est la meilleure réponse car il ne montre que les balises réelles, pas tous les commits, honte, alors merdique a d'autres réponses mieux notées.
samthebest
2
même résultat avec moins de frappe:git tag --format "%(refname:short) %(creatordate:short)"
Andrew Spencer
27

Notez que les deux solutions ci-dessus vous donnent la date de validation, qui peut être très différente de celle lorsque cette validation a été marquée pour la publication. Pour obtenir la date de la balise elle-même, vous devez trouver la balise elle-même rev-parse, la lire avec cat-file, puis l'analyser. Un petit pipeline:

git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'

Rob Shearer
la source
Bon, le seul problème est que le résultat n'est pas formaté (1419372909 -0300)
Jose_GD
Une fois que vous avez l'ID de validation de rev-parse, je pense que vous pouvez faire: git rev-parse v1.0.0 | xargs git show -s --pretty =% aI
Keith
@Keith Vous êtes de retour pour afficher la date de l'auteur du commit au lieu de la date taguée, au moins pour les tags annotés
Ben
3

Il n'y a pas d'option simple dans la commande git tag pour faire cela. J'ai trouvé le plus pratique à exécuter

git log --decorate=full

pour lister tous les commits, y compris les balises s'il y en a. Pour lister uniquement les commits marqués, utilisez

git log --decorate=full --simplify-by-decoration

Pour plus de détails, utilisez

git help log
VojtaK
la source
2

on peut utiliser gawk(not awk) pour convertir la date dans la ligne "tagger" en quelque chose de lisible par l'homme:

git rev-parse v4.4-rc1 | xargs git cat-file -p | gawk '/^tagger/ { print strftime(PROCINFO["strftime"], $(NF-1)) }'

si on n'aime pas gawkalors datepeut être utilisé pour convertir l'heure unix:

git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print "@" $(NF-1) }' | xargs date -d

et exemple ( dnsmasqgit repo):

$ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print "@" $(NF-1) }' | xargs date -d
Wed May 18 16:52:12 CEST 2016
Vladis
la source
essayez-vous cela de votre côté ??
Vishal Patel
sûrement. ça marche, dnsmasqgit repo, par exemple: $ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print strftime(PROCINFO["strftime"], $(NF-1)) }' Wed May 18 16:52:12 CEST 2016
vladis