Получить время и дату тегов 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.



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

550   6  

6 ответов:

использовать до git log:

git log -1 --format=%ai MY_TAG_NAME

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

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

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

Comments

    Ничего не найдено.