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)?
Verwenden Sie die --format
Argument zu git log
:
git log -1 --format=%ai MY_TAG_NAME
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.
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 '>'
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'
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
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