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)?


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


Réponses:


71

Utilisez l' --formatargument pour git log:

git log -1 --format=%ai MY_TAG_NAME

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.


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'

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 '>'


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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.