Отримайте час і дату тегів git


87

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

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

Моя мета - перелічити випуски та дати випуску у веб-інтерфейсі (тег / дата фіксації = дата випуску). На даний момент ми перераховуємо всі випуски за допомогою git tag.

Як я можу отримати час і дату, коли був зроблений тег (або коміт, на який вказує)?


2
Тут добре уточнити, що це дата фіксації тегу, який ви шукаєте. Оскільки тег не має дати.
jobwat


Відповіді:


71

Використовуйте --formatаргумент для git log:

git log -1 --format=%ai MY_TAG_NAME

3
ПОРАДА - Замініть "TAG" на ім'я тегу. Наприклад, git log -1 --format=%ai v0.2.3.
Тобіас,

5
Якщо ви хочете ISO8601, зробіть --format=%aI( велике "Я")
Хаїм Елія

git log -1 --format=%ai MY_TAG_NAME | catвимкнути перегляд сторінки
elinx

Що робить "-1"?
Blademaster

@Blademaster Він повідомляє, що git logпотрібно показати лише один коміт , той, що відноситься до тегу. Типовою поведінкою є відображення всіх комітів від зазначеного назад до першого коміту в репозиторії.
user4815162342

82

Це завжди працювало для мене:

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

Зверніться до розділу "PRETTY FORMATS" на сторінці сторінки git-log для отримання детальної інформації про рядок форматування, якщо ви хочете інше форматування дати.


13
Хоча для попередження, тут буде вказана дата / час для коміту, але не дата / час для коментованого тегу.
WiSaGaN

4
Просто вставте taglog = log --tags --simplify-by-decoration --pretty='format:%ci %d'(зверніть увагу на одинарні, а НЕ подвійні лапки) у розділі [псевдонім] вашого файлу .gitconfig, і тепер у вас є команда git taglog :)
Ламбарт,

39

Ще один варіант:

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'

3
Це найкраща відповідь для отримання дати мітки.
Джозеф К. Штраус

Крім того, ви можете отримати позначку часу unix з git for-each-ref --format="%(taggerdate:unix)" refs/tagsпідрядком або якgit for-each-ref --format="%(taggerdate:raw)" refs/tags
RD

1
Дякую! У всіх інших відповідях просто вказується дата фіксації, а не дата тегу.
Сем

Так defo найкраща відповідь, оскільки вона показує лише фактичні теги, а не всі коміти, ганьба дерьмовий ТАК інші відповіді оцінені вище.
самий найкращий

2
той самий результат із меншим набором тексту:git tag --format "%(refname:short) %(creatordate:short)"
Ендрю Спенсер,

27

Зауважте, що обидва наведені вище рішення дають вам дату коміту, яка може сильно відрізнятися від тієї, коли цей коміт був позначений для випуску. Щоб отримати дату самого тегу, вам потрібно знайти сам тег rev-parse, прочитати його cat-file, а потім проаналізувати. Трохи трубопроводу:

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


Добре, проблема полягає лише в тому, що результат не відформатований (1419372909 -0300)
Jose_GD

Отримавши ідентифікатор коміту з rev-parse, я вважаю, що ви можете зробити: git rev-parse v1.0.0 | xargs git show -s --pretty =% aI
Кіт

@Keith Тепер ти знову показуєш дату автора фіксації замість позначеної дати, принаймні для анотованих тегів
Бен,

3

У команді git tag для цього немає простої опції. Я знайшов найбільш зручним для бігу

git log --decorate=full

перерахувати всі коміти, включаючи теги, якщо такі є. Для переліку лише комітів, які позначені тегами

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

Для деталей використовуйте

git help log

2

можна використовувати 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

ти пробуєш це з твоєї сторони ??
Vishal Patel

звичайно. це працює, dnsmasqgit 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
vladis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.