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.