Как перечислить все теги вместе с полным сообщением в git?

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

git tag -n5

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

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

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

git tag -n99

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

10 ответов

Решение
git tag -n99

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

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

git tag -n9

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

git tag -l -n9

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

git tag -l -n9 v3.*

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

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

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

for t in `git tag -l`; do git cat-file -p `git rev-parse $t`; done

Используйте параметр --format

git tag -l --format='%(tag) %(subject)'

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

for c in $(git for-each-ref refs/tags/ --format='%(refname)'); do echo $c; git show --quiet "$c"; echo; done

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

git cat-file -p $(git rev-parse $(git tag -l | tail -n1)) | tail -n +6

Как насчет "git tag -n" г-н Джу внес свой вклад в этот ответ.

git tag -l --format='%(contents)'

или

git for-each-ref refs/tags/ --format='%(contents)'

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

  • %(contents:subject) выведет только первую строку
  • %(contents:body) выведет аннотацию без первой строки и подписи (только полезный текст)
  • %(contents:signature) выведет только PGP-подпись

Смотрите больше в man git-for-each-refРаздел "Названия полей".

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

Команда ниже может предоставить дополнительную информацию о тегах.

      git tag --format='%(refname:strip=2)%09%(creatordate:short)%09%(authorname)%09%(subject)' --sort=-creatordate

Тег списка результатов, дата, имя, одна строка:

      R7.0 2023-06-28  John Doe  [APP]Modified for release
R6.5 2023-04-02  John Doe  [APP]Updated readme

Чтобы получить полное сообщение, измените тему в команде наcontents .

Формат: «%(имя поля)». Например, «%09» — это «\t», «%0a» — это «\n», %(color:red) и т. д. Подробности см.

      git help for-each-ref
Другие вопросы по тегам