Подтвердить что ты не робот

Получить время и дату тегов git

У меня есть проект, который использует git и помечает все выпуски тегом.

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

Моя цель - перечислить даты выпуска и выпуска в веб-интерфейсе (дата тега/фиксации = дата выпуска). В настоящее время мы перечисляем все выпуски с помощью git tag.

Как я могу получить время и дату, когда был создан тег (или фиксация, на которую он указывает)?

4b9b3361

Ответ 1

Используйте аргумент --format для git log:

git log -1 --format=%ai MY_TAG_NAME

Ответ 2

Это всегда срабатывало для меня:

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

Обратитесь к разделу "PRETTY FORMATS" справочной страницы git -log для получения подробной информации о строке формата, если вы хотите другое форматирование даты.

Ответ 3

Обратите внимание, что оба вышеупомянутых решения дают вам дату фиксации, которая может отличаться от того, когда этот фиксатор был помечен для выпуска. Чтобы получить дату самого тега, вам нужно найти сам тег rev-parse, прочитать его с помощью cat-file, а затем проанализировать его. Маленький трубопровод:

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

Ответ 4

Еще один вариант:

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

Смотрите https://git-scm.com/docs/git-for-each-ref#_field_names для параметров формата

%(creatordate) указывает дату фиксации, чтобы увидеть дату создания тега при использовании %(taggerdate)

Вы можете напрямую включить оболочку:

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

Ответ 5

можно использовать gawk (not awk), чтобы преобразовать дату в строке "tagger" в нечто читаемое человеком:

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

если вам не нравится gawk, тогда date можно использовать для преобразования времени unix:

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

и пример (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

Ответ 6

В команде git tag нет простой опции для этого. Я нашел наиболее удобным для запуска

git log --decorate=full

чтобы перечислить все коммиты, включая теги, если они есть. Для перечисления только коммиты, помеченные с использованием тегов

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

Подробнее см.

git help log