Как перечислить все теги вместе с полным сообщением в git? - PullRequest
307 голосов
/ 19 марта 2011

Я хочу, чтобы git перечислил все теги вместе с полной аннотацией или сообщением о коммите. Нечто подобное близко:

git tag -n5

Это именно то, что я хочу, за исключением того, что оно будет отображаться только до первых 5 строк сообщения тега.

Полагаю, я могу использовать очень большое число. Какое наибольшее число я могу использовать здесь? Это одинаково на каждом компьютере?

ОБНОВЛЕНИЕ : У меня было много времени, чтобы подумать об этом, и теперь я думаю, что я не обязательно хочу показывать все сообщение, если оно чрезвычайно длинное. Мне кажется, что-то вроде этого работает нормально:

git tag -n99

Если сообщение тега действительно длиннее 99 строк, я не хочу видеть все это. Но Git чрезвычайно сложен и гибок. В каких случаях это не будет лучшим решением? Я заметил, что многие из опубликованных решений использовали опцию -l, но не для того, чтобы указать шаблон для поиска?

Ответы [ 6 ]

296 голосов
/ 31 декабря 2012

Попробуйте, это перечислит все теги вместе с аннотациями и 9 строками сообщений для каждого тега:

git tag -n9

можно также использовать

git tag -l -n9

если конкретные теги должны быть в списке:

git tag -l -n9 v3.*

(например, приведенная выше команда будет отображать только теги, начинающиеся с "v3.")

-l, --list Перечислите теги с именами, которые соответствуют заданному шаблону (или всем, если шаблон не указан). Запуск «git tag» без аргументов также перечисляет все теги Шаблон является подстановочным знаком оболочки (то есть сопоставляется с помощью fnmatch (3)). Может быть дано несколько шаблонов; если любой из них совпадения, тег отображается.

91 голосов
/ 14 октября 2014
git tag -n99

Коротко и сладко. Это будет содержать до 99 строк из сообщения аннотации / фиксации. Вот ссылка на официальную документацию по тегу git: http://git -scm.com / docs / git-tag

24 голосов
/ 08 января 2013

Ответ Марка Лонгэйра (с использованием git show) близок к желаемому в вопросе.Однако он также включает в себя коммит, на который указывает тег, вместе с полным патчем для этого коммита.Поскольку фиксация может быть несколько не связана с тегом (это попытка захвата тега только одним коммитом), это может быть нежелательно.Я считаю, что следующее немного лучше:

for t in `git tag -l`; do git cat-file -p `git rev-parse $t`; done
11 голосов
/ 19 марта 2011

Это далеко не красиво, но вы могли бы создать скрипт или псевдоним, который делает что-то вроде этого:

for c in $(git for-each-ref refs/tags/ --format='%(refname)'); do echo $c; git show --quiet "$c"; echo; done
9 голосов
/ 01 октября 2014

Только последнее сообщение с тегом:

git cat-file -p $(git rev-parse $(git tag -l | tail -n1)) | tail -n +6
2 голосов
/ 26 сентября 2013

Я предпочитаю делать это в командной строке, но если вы не возражаете против веб-интерфейса и используете GitHub, вы можете посетить https://github.com/user/repo/tags и нажать «...» рядом с каждым тегом, чтобы отобразить его аннотацию.

...