У меня есть проект, в котором используется 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 v0.2.3
.--format=%aI
(заглавная «I»)git log -1 --format=%ai MY_TAG_NAME | cat
отключить просмотр страницыgit log
нужно показать только одну фиксацию, относящуюся к тегу. Поведение по умолчанию - показать все коммиты от указанного до первого коммита в репозитории.У меня это всегда срабатывало:
Если вам нужно другое форматирование даты, обратитесь к разделу "PRETTY FORMATS" на странице git-log man для получения подробной информации о строке формата.
источник
taglog = log --tags --simplify-by-decoration --pretty='format:%ci %d'
(обратите внимание на одинарные, а НЕ двойные кавычки) в разделе [alias] вашего файла .gitconfig, и теперь у вас есть команда git taglog :)Еще один вариант:
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'
источник
git for-each-ref --format="%(taggerdate:unix)" refs/tags
или в виде подстроки вgit for-each-ref --format="%(taggerdate:raw)" refs/tags
git tag --format "%(refname:short) %(creatordate:short)"
Обратите внимание, что оба приведенных выше решения дают вам дату фиксации, которая может сильно отличаться от того, когда эта фиксация была помечена для выпуска. Чтобы получить дату самого тега, вам нужно найти сам тег с
rev-parse
, прочитать егоcat-file
, а затем проанализировать его. Небольшой конвейер:git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'
источник
Для этого в команде git tag нет простой опции. Я нашел наиболее удобным для бега
чтобы перечислить все коммиты, включая теги, если они есть. Для перечисления только помеченных коммитов используйте
Для получения подробной информации используйте
источник
можно использовать
gawk
(неawk
), чтобы преобразовать дату в строке "tagger" в нечто удобочитаемое:если что-то не нравится,
gawk
тоdate
можно использовать для преобразования времени unix:и пример (
dnsmasq
git repo):источник
dnsmasq
git repo, например:$ 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