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)?


2
Dobrze jest tutaj sprecyzować, że jest to data zatwierdzenia tagu, którego szukasz. Ponieważ tag nie ma daty.
jobwat


Odpowiedzi:


71

Użyj --formatargumentu, aby git log:

git log -1 --format=%ai MY_TAG_NAME

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.


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'

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


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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.