Список git тегов, дат и сообщений
Как мне указать имя тега, дату тега и тег для всех тегов?
Кажется, что разделение логики отображения git для совершения транзакций через git log
и тегов через git tag
затрудняет список имени тега, даты тега и сообщения тега.
Я могу показать дату, имя и сообщение тега, используя git log --tags --show-notes --simplify-by-decoration --pretty="format:%ai %d %s"
Я проверил http://opensource.apple.com/source/Git/Git-26/src/git-htmldocs/pretty-formats.txt, но не увидел никакой возможности показывать сообщение тега.
Я могу показать имя тега и 5 строк сообщения тега, используя git tag -n5
.
Но для того, чтобы все три части информации, казалось бы, нуждались в gnarly-скриптах помимо моих возможностей.
Ответы
Ответ 1
Вы хотите использовать команду for-each-ref
. К сожалению, он немного менее удобен для пользователя, чем filter-branch
Обратите внимание, что информация, такая как дата тега и теггер, доступна только для аннотированных тегов.
Ниже представлен базовый прототип. Обратите внимание, что формат = может быть полной оболочкой script и, вероятно, должен зависеть от того, насколько сложным вы хотите выход. У них есть несколько примеров, специально предназначенных для тегов в документации для каждого документа
git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags
Ответ 2
git show --tags
, по крайней мере, выведет всю необходимую информацию о ваших тегах. Возможно, вы сможете найти подходящую последовательность --pretty=format:
.
Ответ 3
Я не знаю, есть ли способ
укажите только тег, тег и тег для всех тегов используя только синтаксис git.
Но простой grep выполнит эту задачу:
git show --tags |grep "^tag " -A4
Обратите внимание, что после сопоставления я определяю 4 строки конечного контекста, поскольку стандартный вывод показывает имя тега, дату тега и сообщение тега в отдельной строке.
Если вам нужно иметь дело с сообщениями с несколькими строками, я предпочел бы использовать трубопровод для awk, который немного более громоздкий:
git show --tags |awk "/^tag /,/-----BEGIN PGP SIGNATURE-----|commit /" |egrep -v "^$" |sed -E "s/^-----BEGIN PGP SIGNATURE-----.*|^commit.*/-/"
Это будет работать до тех пор, пока за сообщением тега следует либо подпись PGP SIGNATURE, либо сообщение фиксации, что afaik - все возможные ситуации. Однако вы можете легко адаптировать последний grep для покрытия других ситуаций (если они были).
Ответ 4
Это скорее следующий вопрос к ответу Эндрю, немного другая, но связанная с этим тема.
git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags
Это отлично работает в прямой командной строке. Когда я устанавливаю псевдоним git в ~/.gitconfig, он, похоже, не выводит один и тот же вывод.
При непосредственном вызове в командной строке я получаю.
package-release-14.7.2 ср. 3 дек. 14:24:38 2014 -0800 14.7.2: копия для тега package-release-14.7.2
package-release-14.7.3 Чт. 4 декабря 14:14:55 2014 -0800 14.7.3: копия для тега package-release-14.7.3
Пакет-релиз-14.7.4 Пятница 5 декабря 16:16:40 2014 -0800 14.7.4: копия для тега package-release-14.7.4
И когда я вызываю псевдоним git (taghist = for-each-ref -format = "% (refname: short)% (taggerdate)% (subject)% (body)" refs/tags), я получить
package-release-14.7.2
пакет-релиз-14.7.3
пакет-релиз-14.7.4
-San