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

361

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

git tag -n5

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

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

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

still_dreaming_1
источник
62
git tag -nсделал это для меня
Мартин Бергер
11
git tag -nпечатает только первую строку аннотации, в соответствии с man-страницей.
Пол Прайс
@INTPner, согласен, тег -l используется для перечисления тегов с определенным шаблоном. Редактирование ответа.
Зубаир

Ответы:

350

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

git tag -n9

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

git tag -l -n9

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

git tag -l -n9 v3.*

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

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

Зубайр
источник
6
Это напечатает только первую строку каждой аннотации.
Пол Прайс
3
@Paul Price: только у вас есть аннотация, иначе она печатает сообщение о коммите. Согласитесь , это не ответ.
Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
3
Согласно документации, -lопция заключается в фильтрации по шаблону. Я не понимаю, как это было бы полезно здесь. Я что-то пропустил?
still_dreaming_1
2
@INTPnerd да, здесь -lсовершенно лишнее
Ламбарт,
1
@ P.MyerNore Вы должны использовать странную версию git или передавать дополнительные аргументы, чтобы сделать что-то большее, чем задает этот вопрос. Но хорошо знать, что для определенных ситуаций необходим ключ -l.
still_dreaming_1
119
git tag -n99

Коротко и сладко. Это будет содержать до 99 строк каждого тега аннотации / сообщения о коммите. Вот ссылка на официальную документацию по тегу git .

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

Я имею в виду, я думаю, что может быть особая ситуация или причина, чтобы хотеть видеть массивные сообщения тегов, но в какой момент вы не хотите видеть все сообщение? Когда в нем более 999 строк? 10000? 1000000? Моя точка зрения, как правило, имеет смысл ограничить количество строк, которые вы видите, и это число позволяет вам установить это.

Поскольку я привожу аргумент в отношении того, что вы обычно хотите видеть при просмотре своих тегов, вероятно, имеет смысл установить что-то вроде этого в качестве псевдонима (из комментария Юлиана Онофрея ниже):

git config --global alias.tags 'tag -n99'

Я имею в виду, вы не хотите вводить git tag -n99каждый раз, когда вы просто хотите увидеть свои теги, не так ли? Как только этот псевдоним настроен, всякий раз, когда вы хотите увидеть свои теги, вы просто вводите git tagsв свой терминал. Лично я предпочитаю пойти дальше, чем это, и создать еще более сокращенные псевдонимы bash для всех моих часто используемых команд. Для этого вы можете добавить что-то вроде этого в ваш файл .bashrc (работает в Linux и подобных средах):

alias gtag='git tag -n99'

Затем, когда вы хотите увидеть свои теги, вы просто печатаете gtag. Еще одно преимущество перехода по пути псевдонима (псевдонимы git или псевдонимы bash или что-то еще) заключается в том, что у вас уже есть место, где вы можете добавить дополнительные настройки того, как лично вы обычно хотите, чтобы ваши теги показывались вам (например, сортировка). их определенным образом, как в моем комментарии ниже и т. д.). Как только вы преодолеете трудности, связанные с созданием своего первого псевдонима, вы поймете, как легко создавать больше таких элементов для других вещей, которые вам нравятся, работать индивидуально, например git log, но давайте сохраним этот для другого вопроса / ответа. ,

still_dreaming_1
источник
3
git config --global alias.tags 'tag -n99'
Юлиан Онофрей
@IulianOnofrei, хорошо, я не знал, что git позволяет вам определять псевдонимы. Я понимаю, что это не по теме, но я не могу удержаться. Это то, что я сейчас использую (помещено в ваш .bashrc или что-то в этом роде):alias gtag='git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags | sort -V'
still_dreaming_1
25

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

for t in `git tag -l`; do git cat-file -p `git rev-parse $t`; done
Пол Прайс
источник
Git-шоу Марка не показывало патчи для моего использования. Его команда опускает -p или --patch, но чтобы быть полностью уверенным в пропуске diff, можно использовать: --no-patch. (на git v2.7.1 / mac)
AnneTheAgile
13

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

for c in $(git for-each-ref refs/tags/ --format='%(refname)'); do echo $c; git show --quiet "$c"; echo; done
Марк Лонгэйр
источник
Есть ли причина не заменять git for-each-ref refs/tags/ --format='%(refname)'на git tag -l?
Шай Бергер
@ShaiBerger: на практике я так не думаю - наверное, я просто думал, что git tagэто фарфор и git for-each-refсантехника, поэтому вывод последнего должен быть более стабильным для сценариев.
Марк Лонгэйр
10

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

git cat-file -p $(git rev-parse $(git tag -l | tail -n1)) | tail -n +6
gaRex
источник
2
Для всех, кто сталкивался с этим в Google: Если вы хотите показать сообщение из определенного тега: git cat-file -p <tag> | tail -n +6
Кит Питерс
6

Использовать опцию --format

git tag -l --format='%(tag) %(subject)'
Александр Туманов
источник
2

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

agouge
источник