Uzyskaj godzinę i datę tagów git

88

Mam projekt, który używa git i oznaczyłem wszystkie wydania tagiem.

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

Moim celem jest wymienienie wydań i dat wydania w interfejsie internetowym (tag / data zatwierdzenia = data wydania). Obecnie podajemy wszystkie wydania przy użyciu git tag.

Jak mogę sprawdzić godzinę i datę, kiedy tag został utworzony (lub zatwierdzenie, na które wskazuje)?

HNygard
źródło
2
Dobrze jest tutaj sprecyzować, że jest to data zatwierdzenia tagu, którego szukasz. Ponieważ tag nie ma daty.
jobwat
1
@jobwat adnotacjami tagi zrobić mieć datę .
chrstphrchvz

Odpowiedzi:

71

Użyj --formatargumentu, aby git log:

git log -1 --format=%ai MY_TAG_NAME
user4815162342
źródło
3
WSKAZÓWKA - Zastąp „TAG” nazwą tagu. Na przykład git log -1 --format=%ai v0.2.3.
Tobias
5
Jeśli chcesz ISO8601, zrób --format=%aI(duże „I”)
Chaim Eliyah,
git log -1 --format=%ai MY_TAG_NAME | catwyłącz widok strony
elinx
Co robi „-1”?
Blademaster
@Blademaster Mówi, git logaby pokazać tylko jedno zatwierdzenie, to odnoszące się do tagu. Domyślnym zachowaniem jest pokazanie wszystkich zatwierdzeń od określonego z powrotem do pierwszego zatwierdzenia w repozytorium.
user4815162342
83

To zawsze działało dla mnie:

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

Zapoznaj się z sekcją „PRETTY FORMATS” na stronie podręcznika git-log, aby uzyskać szczegółowe informacje o ciągu formatu, jeśli chcesz użyć innego formatowania daty.

Nikos C.
źródło
13
Należy jednak ostrzec, że wyświetli datę / godzinę zatwierdzenia, ale nie datę / godzinę dla znacznika z adnotacjami.
WiSaGaN
5
Po prostu umieść taglog = log --tags --simplify-by-decoration --pretty='format:%ci %d'(zwróć uwagę na pojedyncze -, NIE podwójne cudzysłowy) w sekcji [alias] twojego pliku .gitconfig, a teraz masz polecenie git taglog :)
Lambart
40

Jeszcze jedna opcja:

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

Zobacz https://git-scm.com/docs/git-for-each-ref#_field_names, aby poznać opcje formatu

%(creatordate) podaje datę zatwierdzenia wskazanego, aby zobaczyć datę utworzenia znacznika podczas użycia %(taggerdate)

Możesz włączyć powłokę bezpośrednio:

$> 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'
bez sekwenatora
źródło
3
To najlepsza odpowiedź na ustalenie daty tagu.
Joseph K. Strauss
Alternatywnie możesz pobrać sygnaturę czasową unixa z git for-each-ref --format="%(taggerdate:unix)" refs/tagslub jako podciąg wgit for-each-ref --format="%(taggerdate:raw)" refs/tags
RD
1
Dziękuję Ci! Wszystkie inne odpowiedzi podają tylko datę zatwierdzenia, a nie datę znacznika.
Sam
Tak, zdecydowanie najlepsza odpowiedź, ponieważ pokazuje tylko rzeczywiste tagi, a nie wszystkie zatwierdzenia, szkoda, kiepski SO ma inne odpowiedzi ocenione wyżej.
samthebest
2
ten sam wynik przy mniejszym wpisywaniu:git tag --format "%(refname:short) %(creatordate:short)"
Andrew Spencer
27

Zauważ, że oba powyższe rozwiązania dają ci datę zatwierdzenia, która może być bardzo różna niż wtedy, gdy to zatwierdzenie zostało oznaczone do wydania. Aby uzyskać datę samego tagu, musisz znaleźć sam tag za pomocą rev-parse, przeczytać go cat-file, a następnie przeanalizować. Mały rurociąg:

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

Rob Shearer
źródło
Dobrze, jedynym problemem jest to, że wynik nie jest sformatowany (1419372909-0300)
Jose_GD,
Kiedy już masz identyfikator zatwierdzenia z analizy rev-parse, wierzę, że możesz to zrobić: git rev-parse v1.0.0 | xargs git show -s --pretty =% aI
Keith,
@Keith Teraz wracasz do wyświetlania daty autora zatwierdzenia zamiast oznaczonej daty, przynajmniej w przypadku tagów z adnotacjami
Ben
3

W poleceniu git tag nie ma prostej opcji, aby to zrobić. Wydaje mi się, że najwygodniej jest biegać

git log --decorate=full

aby wymienić wszystkie zatwierdzenia, w tym znaczniki, jeśli takie istnieją. Do wyświetlania tylko zatwierdzeń oznaczonych tagiem użyj

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

Aby uzyskać szczegółowe informacje, użyj

git help log
VojtaK
źródło
2

można użyć gawk(nie awk) do konwersji daty w wierszu „tagger” na coś czytelnego dla człowieka:

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

Jeśli ktoś nie jak gawkwtedy datemoże być użyty do konwersji czas uniksowy:

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

i przykład ( 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
źródło
czy próbujesz tego z własnej strony?
Vishal Patel
pewno. działa, dnsmasqrepo git, na przykład: $ 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