Ответ 1
Используйте аргумент --format
для git log
:
git log -1 --format=%ai MY_TAG_NAME
У меня есть проект, который использует git и помечает все выпуски тегом.
$ git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.1.0
Моя цель - перечислить даты выпуска и выпуска в веб-интерфейсе (дата тега/фиксации = дата выпуска). В настоящее время мы перечисляем все выпуски с помощью git tag
.
Как я могу получить время и дату, когда был создан тег (или фиксация, на которую он указывает)?
Используйте аргумент --format
для git log
:
git log -1 --format=%ai MY_TAG_NAME
Это всегда срабатывало для меня:
git log --tags --simplify-by-decoration --pretty="format:%ci %d"
Обратитесь к разделу "PRETTY FORMATS" справочной страницы git -log для получения подробной информации о строке формата, если вы хотите другое форматирование даты.
Обратите внимание, что оба вышеупомянутых решения дают вам дату фиксации, которая может отличаться от того, когда этот фиксатор был помечен для выпуска. Чтобы получить дату самого тега, вам нужно найти сам тег rev-parse
, прочитать его с помощью cat-file
, а затем проанализировать его. Маленький трубопровод:
git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'
Еще один вариант:
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'
можно использовать 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
В команде git tag нет простой опции для этого. Я нашел наиболее удобным для запуска
git log --decorate=full
чтобы перечислить все коммиты, включая теги, если они есть. Для перечисления только коммиты, помеченные с использованием тегов
git log --decorate=full --simplify-by-decoration
Подробнее см.
git help log