web-dev-qa-db-fra.com

Obtenez l'heure et la date des balises git

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 versions et les dates de sortie dans une interface web (tag/commit date = date de sortie). Actuellement, nous répertorions toutes les versions en utilisant git tag.

Comment puis-je obtenir l'heure et la date de création de la balise (ou la validation vers laquelle elle pointe)?

67
HNygard

Utilisez le --format argument à git log:

git log -1 --format=%ai MY_TAG_NAME
56
user4815162342

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.

66
Nikos C.

Notez que les deux solutions ci-dessus vous obtiennent la date de validation, qui peut être très différente de celle lorsque ce commit a été balisé pour publication. Pour obtenir la date de la balise elle-même, vous devez trouver la balise elle-même avec rev-parse, lisez-le 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 '>'

24
Rob Shearer

Encore une 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 de création de la balise lors de l'utilisation %(taggerdate)

Vous pouvez intégrer 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'
20
non sequitor

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

git log --decorate=full

pour répertorier toutes les validations, y compris les balises, s'il y en a. Pour répertorier uniquement les validations marquées, utilisez

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

Pour plus de détails, utilisez

git help log
2
VojtaK

on peut utiliser gawk (pas 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 gawk alors date peut être utilisé pour convertir le temps unix:

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

et exemple (dnsmasq git 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
1
vladis