Как перечислить все теги вместе с полным сообщением в 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