Получить время и дату тегов git
у меня есть проект, который использует git и пометил все релизы тегом.
$ git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.1.0
моя цель-перечислить релизы и даты выпуска в веб-интерфейсе (tag/commit date = release date). В настоящее время мы перечисляем все релизы с помощью git tag.
как я могу получить время и дату, когда был сделан тег (или фиксация, на которую он указывает)?
6 ответов:
это всегда работало для меня:
git log --tags --simplify-by-decoration --pretty="format:%ci %d"обратитесь к разделу "красивые форматы" справочной страницы 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'
для этого нет простой опции в команде git tag. Я нашел наиболее удобным для запуска
git log --decorate=fullчтобы перечислить все коммиты, включая теги, если они есть. Для перечисления только коммитов с тегами используйте
git log --decorate=full --simplify-by-decorationдля деталей используйте
git help log
можно использовать
gawk(не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и пример (
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
Comments