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)?
Odpowiedzi:
Użyj
--format
argumentu, abygit log
:źródło
git log -1 --format=%ai v0.2.3
.--format=%aI
(duże „I”)git log -1 --format=%ai MY_TAG_NAME | cat
wyłącz widok stronygit log
aby 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.To zawsze działało dla mnie:
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.
źródło
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 :)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'
źródło
git for-each-ref --format="%(taggerdate:unix)" refs/tags
lub jako podciąg wgit for-each-ref --format="%(taggerdate:raw)" refs/tags
git tag --format "%(refname:short) %(creatordate:short)"
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ć gocat-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 '>'
źródło
W poleceniu git tag nie ma prostej opcji, aby to zrobić. Wydaje mi się, że najwygodniej jest biegać
aby wymienić wszystkie zatwierdzenia, w tym znaczniki, jeśli takie istnieją. Do wyświetlania tylko zatwierdzeń oznaczonych tagiem użyj
Aby uzyskać szczegółowe informacje, użyj
źródło
można użyć
gawk
(nieawk
) do konwersji daty w wierszu „tagger” na coś czytelnego dla człowieka:Jeśli ktoś nie jak
gawk
wtedydate
może być użyty do konwersji czas uniksowy:i przykład (
dnsmasq
git repo):źródło
dnsmasq
repo 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