wake-up-neo.com

Holen Sie sich die Uhrzeit und das Datum der Git-Tags

Ich habe ein Projekt, das Git verwendet, und habe alle Veröffentlichungen mit einem Tag versehen.

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

Mein Ziel ist es, die Veröffentlichungen und Veröffentlichungsdaten in einer Weboberfläche aufzulisten (Tag/Festschreibungsdatum = Veröffentlichungsdatum). Derzeit listen wir alle Releases mit git tag.

Wie kann ich die Uhrzeit und das Datum abrufen, an dem das Tag erstellt wurde (oder auf das es verweist)?

67
HNygard

Verwenden Sie die --format Argument zu git log:

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

Das hat bei mir immer geklappt:

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

Im Abschnitt "PRETTY FORMATS" der Handbuchseite zu git-log finden Sie Einzelheiten zur Formatzeichenfolge, wenn Sie eine andere Datumsformatierung wünschen.

66
Nikos C.

Beachten Sie, dass Sie für beide oben genannten Lösungen das Festschreibungsdatum erhalten, das sich erheblich von dem Zeitpunkt unterscheiden kann, zu dem diese Festschreibung für die Veröffentlichung markiert wurde. Um das Datum des Tags selbst zu ermitteln, müssen Sie das Tag selbst mit rev-parse Suchen, mit cat-file Lesen und dann analysieren. Eine kleine Pipeline:

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

24
Rob Shearer

Eine weitere Option:

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

Siehe https://git-scm.com/docs/git-for-each-ref#_field_names für Formatoptionen

%(creatordate) gibt das Datum des Commits an, auf das verwiesen wird, um das Erstellungsdatum des Tags anzuzeigen. use %(taggerdate)

Sie können die Shell direkt einbinden:

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

Es gibt keine einfache Option im Befehl git tag, um dies zu tun. Ich fand es am bequemsten zu rennen

git log --decorate=full

um alle Commits einschließlich Tags aufzulisten, falls vorhanden. Für die Auflistung nur Commits, die getaggt sind, verwenden

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

Für Details verwenden

git help log
2
VojtaK

man kann gawk (nicht awk) verwenden, um das Datum in der "tagger" -Zeile in etwas für Menschen lesbares zu konvertieren:

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

wenn man gawk nicht mag, dann kann date verwendet werden, um die Unix-Zeit umzurechnen:

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

und Beispiel (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