Як перелічити всі теги разом з повним повідомленням в git?


359

Я хочу, щоб git перелічив усі теги разом з повним повідомленням або повідомленням про фіксацію. Щось подібне близько:

git tag -n5

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

Напевно, я можу просто використовувати дуже велику кількість. Яке найвище число я можу тут використати? Це однаково на кожному комп’ютері?

ОНОВЛЕННЯ : У мене було багато часу, щоб подумати над цим, і тепер я думаю, що я не обов'язково хочу показувати повноту кожного повідомлення, якщо деякі з них надзвичайно довгі. У мене насправді не було особливої ​​потреби, яка вимагала від мене перегляду масивних повідомлень (крім моєї власної схильності бути довго закрученою у всьому, що я пишу, включаючи повідомлення тегів). Мені просто не сподобалася думка, що не обов’язково збиратись показувати мені все повідомлення, тому що це змусило мене відчути, що вона приховує від мене інформацію. Але занадто багато інформації також може бути поганою справою.


62
git tag -nзробив це для мене
Мартін Бергер

11
git tag -nдрукує лише перший рядок анотації, відповідно до сторінки сторінки.
Пол Прайс

@INTPner, узгоджений, -l тег використовується для переліку тегів із певним малюнком. Редагування відповіді.
Зубаїр

Відповіді:


348

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

git tag -n9

також можна використовувати

git tag -l -n9

якщо конкретні теги мають бути перелічені:

git tag -l -n9 v3.*

(наприклад, вищевказана команда відображатиме лише теги, починаючи з "v3.")

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


6
Це надрукує лише перший рядок кожної примітки.
Пол Прайс

3
@Paul Price: у вас є лише примітка, інакше вона друкує повідомлення про фіксацію. Погодьтеся , це не відповідь.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

3
Згідно з документацією, -lможливість фільтрувати за шаблоном. Я не бачу, як це було б корисно тут. Я щось пропускаю?
still_dreaming_1

2
@INTPnerd так, -lтут абсолютно зайве
Lambart

1
@ P.MyerNore Ви повинні використовувати дивну версію git або передавати додаткові аргументи, щоб зробити щось більше, ніж те, що задає це питання. Але добре знати, що для певних ситуацій потрібен -l.
still_dreaming_1

119
git tag -n99

Короткий і милий. У цьому списку відображатиметься до 99 рядків із кожного повідомлення про анотацію / фіксацію тегів. Ось посилання на офіційну документацію для git tag .

Тепер я думаю, що обмеження показу лише до 99 рядків на тег насправді є хорошою справою, як і більшість часу, якби на один тег дійсно було більше 99 рядків, ви б не хотіли бачити всі інші лінії ви б? Якщо ви хочете бачити більше 99 рядків за тег, ви завжди можете збільшити це до більшої кількості.

Я маю на увазі, я думаю, може виникнути конкретна ситуація або причина, щоб хотіти бачити масові повідомлення з тегами, але в який момент ви не хочете бачити все повідомлення? Коли в ньому більше 999 рядків? 10 000? 1 000 000? Моя думка, як правило, має сенс мати обмеження на кількість рядків, які ви побачили, і це число дозволяє вам встановити це.

Оскільки я навожу аргумент щодо того, що ви, як правило, хочете побачити, дивлячись на свої теги, певно, має сенс встановити щось подібне як псевдонім (з коментаря Юліана Онофрея нижче):

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, але давайте збережемо його для іншого питання / відповіді .


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

Гіт-шоу Марка не показало патчів для мого використання. Його команда опускає -p або --patch, але, щоб бути повністю впевненим у пропуску різниці, можна використовувати: --no-patch. (on 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

2
Для всіх, хто трапляється на цьому з google: Якщо ви хочете показати повідомлення з певного тегу: git cat-file -p <tag> | tail -n +6
Kit Peters


2

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.