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

84

Ich habe ein Projekt, das Git verwendet, und habe alle Releases 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 / Commit-Datum = Veröffentlichungsdatum). Derzeit listen wir alle Releases mit auf git tag.

Wie kann ich die Uhrzeit und das Datum für die Erstellung des Tags (oder das Commit, auf das es verweist) ermitteln?

HNygard
quelle
2
Hier ist es gut zu präzisieren, dass es das Festschreibungsdatum des Tags ist, nach dem Sie suchen. Als Tag hat kein Datum.
Jobwat
1
@jobwat Kommentierte Tags tun ein Datum haben .
chrstphrchvz

Antworten:

68

Verwenden Sie das --formatArgument, um git log:

git log -1 --format=%ai MY_TAG_NAME
user4815162342
quelle
3
TIPP - Ersetzen Sie "TAG" durch den Tag-Namen. Zum Beispiel git log -1 --format=%ai v0.2.3.
Tobias
4
Wenn Sie ISO8601 wollen, tun Sie --format=%aI(Großbuchstabe "I")
Chaim Eliyah
git log -1 --format=%ai MY_TAG_NAME | catSeitenaufruf deaktivieren
elinx
Was macht "-1"?
Blademaster
@Blademaster Es wird angezeigt git log, dass nur ein Commit angezeigt wird , das sich auf das Tag bezieht . Das Standardverhalten besteht darin, alle Festschreibungen von der angegebenen bis zur ersten Festschreibung im Reposotory anzuzeigen.
user4815162342
79

Das hat bei mir immer funktioniert:

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

Einzelheiten zur Formatzeichenfolge finden Sie im Abschnitt "HÜBSCHE FORMATE" der git-log-Manpage, wenn Sie eine andere Datumsformatierung wünschen.

Nikos C.
quelle
12
Um jedoch gewarnt zu werden, werden hier Datum und Uhrzeit für das Festschreiben aufgeführt, nicht jedoch Datum und Uhrzeit für das mit Anmerkungen versehene Tag.
WiSaGaN
3
taglog = log --tags --simplify-by-decoration --pretty='format:%ci %d'Fügen Sie einfach (beachten Sie die einfachen, NICHT doppelten Anführungszeichen) in den Abschnitt [alias] Ihrer .gitconfig-Datei ein, und jetzt haben Sie einen git-Taglog-Befehl :)
Lambart
36

Noch eine 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 Datum anzuzeigen, an dem das Tag bei Verwendung erstellt wurde %(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'
kein Sequitor
quelle
3
Dies ist die beste Antwort, um das Tag-Datum zu erhalten.
Joseph K. Strauss
Alternativ können Sie den Unix-Zeitstempel mit git for-each-ref --format="%(taggerdate:unix)" refs/tagsoder als Teilzeichenfolge ingit for-each-ref --format="%(taggerdate:raw)" refs/tags
RD
1
Danke dir! Alle anderen Antworten geben nur das Festschreibungsdatum und nicht das Tag-Datum an.
Sam
Ja, auf jeden Fall die beste Antwort, da nur die tatsächlichen Tags angezeigt werden, nicht alle Commits. Schade, beschissen. SO hat andere Antworten höher bewertet.
Samthebest
2
gleiches Ergebnis mit weniger Eingabe:git tag --format "%(refname:short) %(creatordate:short)"
Andrew Spencer
27

Beachten Sie, dass Sie mit beiden oben genannten Lösungen das Festschreibungsdatum erhalten, das sich erheblich von dem unterscheiden kann, als dieses Festschreiben für die Veröffentlichung markiert wurde. Um das Datum des Tags selbst zu ermitteln, müssen Sie das Tag selbst finden, mit rev-parselesen cat-fileund dann analysieren. Eine kleine Pipeline:

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

Rob Shearer
quelle
Gut, das einzige Problem ist, dass das Ergebnis nicht formatiert ist (1419372909 -0300)
Jose_GD
Sobald Sie die Commit-ID von rev-parse haben, können Sie meiner Meinung nach Folgendes tun: git rev-parse v1.0.0 | xargs git show -s --pretty =% aI
Keith
@ Keith Jetzt zeigen Sie wieder das Autorendatum des Commits anstelle des mit Tags versehenen Datums, zumindest für kommentierte Tags
Ben
2

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 es welche gibt. Verwenden Sie zum Auflisten nur Commits, die mit Tags versehen sind

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

Für Details verwenden

git help log
VojtaK
quelle
2

man kann das Datum gawk(nicht awk) verwenden, um das Datum in der "Tagger" -Zeile in etwas lesbares umzuwandeln:

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

wenn man nicht wie funktioniert gawkdann datekann verwendet werden , die Unix - Zeit zu konvertieren:

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

und Beispiel ( 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
vladis
quelle
versuchst du das von deiner Seite?
Vishal Patel
sicherlich. es funktioniert, dnsmasqGit Repo, zum Beispiel: $ 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