Come elencare tutti i tag insieme al messaggio completo in git?


360

Voglio che git elencherà tutti i tag insieme all'annotazione completa o al messaggio di commit. Qualcosa del genere è vicino:

git tag -n5

Questo fa esattamente quello che voglio, tranne che mostrerà solo le prime 5 righe del messaggio del tag.

Immagino di poter usare solo un numero molto grande. Qual è il numero più alto che posso usare qui? È lo stesso su tutti i computer?

AGGIORNAMENTO : Ho avuto molto tempo per pensarci, e ora penso che non voglio necessariamente mostrare la totalità di ogni messaggio se alcuni di essi sono straordinariamente lunghi. Non avevo davvero bisogno particolare che mi richiedesse di vedere messaggi di massa (a parte la mia propensione a rimanere a lungo in tutto ciò che scrivo, compresi i messaggi di tag). Semplicemente non mi piaceva l'idea che non mi avrebbe necessariamente mostrato l'intero messaggio, poiché mi faceva sentire come se mi stesse nascondendo informazioni. Ma troppe informazioni possono anche essere una cosa negativa.


62
git tag -nl'ho fatto per me
Martin Berger il

11
git tag -nstampa solo la prima riga dell'annotazione, secondo la manpage.
Paul Price,

@INTPner, concordato, -l tag viene utilizzato per elencare i tag con uno schema specifico. Modifica della risposta.
Zubair,

Risposte:


349

Prova questo, elencherà tutti i tag insieme alle annotazioni e 9 righe di messaggio per ogni tag:

git tag -n9

può anche usare

git tag -l -n9

se devono essere elencati tag specifici:

git tag -l -n9 v3.*

(ad esempio, il comando precedente visualizzerà solo i tag che iniziano con "v3")

-l, --list Elenca i tag con nomi che corrispondono al modello dato (o tutti se non viene dato alcun modello). L'esecuzione di "tag git" senza argomenti elenca anche tutti i tag. Il modello è un jolly di shell (cioè, abbinato usando fnmatch (3)). Si possono dare più schemi; se uno di questi corrisponde, viene mostrato il tag.


6
Questo stamperà solo la prima riga di ogni annotazione.
Paul Price,

3
@Paul Price: solo tu hai un'annotazione, altrimenti stampa il messaggio di commit. D'accordo, questa non è la risposta.
Ciro Santilli 18 冠状 病 六四 事件 法轮功

3
Secondo la documentazione, l' -lopzione è quella di filtrare su un modello. Non vedo come sarebbe utile qui. Mi sto perdendo qualcosa?
still_dreaming_1,

2
@INTPnerd sì, -lqui è totalmente superfluo
Lambart,

1
@ P.MyerNore Devi usare una versione strana di git o passare argomenti aggiuntivi per fare qualcosa di più di quello che questa domanda sta ponendo. Ma è bene sapere che per certe situazioni è necessario il -l.
still_dreaming_1,

119
git tag -n99

Breve e dolce Questo elencherà fino a 99 righe per ogni annotazione tag / messaggio di commit. Ecco un link alla documentazione ufficiale per il tag git .

Ora penso che la limitazione di mostrare solo fino a 99 righe per tag sia in realtà una buona cosa come la maggior parte del tempo, se ci fossero davvero più di 99 righe per un singolo tag, non vorrai davvero vedere tutto il resto di le linee vorresti? Se volessi vedere più di 99 righe per tag, puoi sempre aumentarlo a un numero maggiore.

Voglio dire, suppongo che ci potrebbe essere una situazione specifica o un motivo per voler vedere messaggi di tag di massa, ma a che punto non vuoi vedere l'intero messaggio? Quando ha più di 999 linee? 10.000? 1.000.000? Il mio punto è, in genere ha senso avere un limite su quante righe vedresti, e questo numero ti consente di impostarlo.

Dato che sto discutendo su ciò che generalmente vuoi vedere quando guardi i tuoi tag, probabilmente ha senso impostare qualcosa di simile come alias (dal commento di Iulian Onofrei di seguito):

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

Voglio dire, non vuoi davvero digitare git tag -n99ogni volta che vuoi solo vedere i tuoi tag, vero? Una volta configurato tale alias, ogni volta che vuoi vedere i tuoi tag, devi semplicemente digitare git tagsnel tuo terminale. Personalmente, preferisco fare le cose un passo oltre e creare alias bash ancora più abbreviati per tutti i miei comandi comunemente usati. A tale scopo, potresti aggiungere qualcosa del genere al tuo file .bashrc (funziona su Linux e ambienti simili):

alias gtag='git tag -n99'

Quindi ogni volta che vuoi vedere i tuoi tag, devi solo digitare gtag. Un altro vantaggio di percorrere il percorso dell'alias (o git alias o bash alias o qualsiasi altra cosa) è ora che hai già un posto in cui puoi aggiungere ulteriori personalizzazioni a come personalmente, generalmente vuoi che i tuoi tag ti vengano mostrati (come l'ordinamento in certi modi come nel mio commento qui sotto, ecc.). Una volta superato il trambusto della creazione del tuo primo alias, ora ti renderai conto di quanto sia facile crearne di più per altre cose che ti piace lavorare in modo personalizzato, ad esempio git log, ma salviamo quello per una domanda / risposta diversa .


3
git config --global alias.tags 'tag -n99'
Iulian Onofrei il

@IulianOnofrei, carino, non sapevo che Git ti permettesse di definire gli alias. Mi rendo conto che questo è fuori tema, ma non posso resistere. Questo è quello che sto usando ora (inserito nel tuo .bashrc o qualcosa del genere):alias gtag='git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags | sort -V'
still_dreaming_1

25

La risposta di Mark Longair (usando git show) è vicina a ciò che si desidera nella domanda. Tuttavia, include anche il commit indicato dal tag, insieme alla patch completa per quel commit. Poiché il commit può essere in qualche modo non correlato al tag (è solo un commit che il tag sta tentando di acquisire), questo potrebbe essere indesiderabile. Credo che quanto segue sia un po 'più bello:

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

Mark Git Show non ha mostrato patch per il mio utilizzo. Il suo comando omette -p o --patch, ma per essere totalmente sicuri di saltare il diff, si può usare: --no-patch. (su git v2.7.1 / mac)
AnneTheAgile

13

È tutt'altro che carino, ma potresti creare uno script o un alias che fa qualcosa del genere:

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

C'è una ragione non sostituire git for-each-ref refs/tags/ --format='%(refname)'con git tag -l?
Shai Berger,

@ShaiBerger: in pratica, io non la penso così - credo che stavo solo pensando che git tagè porcellana e git for-each-refidraulico, quindi l'output di quest'ultimo dovrebbe essere più stabile per gli script.
Mark Longair,

10

Solo ultimo tag tag:

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

2
Per chiunque altro accada su questo da google: se vuoi mostrare il messaggio da un tag particolare: git cat-file -p <tag> | tail -n +6
Kit Peters


2

Preferisco farlo dalla riga di comando, ma se non ti dispiace un'interfaccia web e usi GitHub, puoi visitare https://github.com/user/repo/tagse fare clic sul "..." accanto a ciascun tag per visualizzare la sua annotazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.