2012-08-31 16 views
18

Come è possibile elencare il nome del tag, la data del tag e il messaggio di tag per tutti i tag?Elenco nomi git tag, date e messaggi

Sembra che la separazione di Git della logica di visualizzazione per il commit tramite git log e tag attraverso git tag renda difficile elencare il nome del tag, la data del tag e il messaggio del tag.

posso mostrare la data tag, nome e messaggio di commit utilizzando git log --tags --show-notes --simplify-by-decoration --pretty="format:%ai %d %s"

ho controllato http://opensource.apple.com/source/Git/Git-26/src/git-htmldocs/pretty-formats.txt ma non ho visto alcuna opzione per mostrare il messaggio di tag.

Posso mostrare il nome dell'etichetta e 5 righe di messaggio di tag utilizzando git tag -n5.

Ma per ottenere tutte e tre le informazioni sembra richiedere uno script nodoso oltre le mie capacità.

risposta

4

git show --tags fornirà almeno tutte le informazioni pertinenti sui tag. Potresti riuscire a trovare una sequenza appropriata --pretty=format: da lì.

+7

Questo appare come un modo molto complicato per dire 'git spettacolo --tags', che tra l'altro non sembra avere un formato per quello la domanda dell'autore ha bisogno. –

+0

@ MichałPolitowski Ah sì. 'git show --tags' farà la stessa cosa Modifica la risposta di conseguenza. – Christopher

0

Non so se c'è un modo per

lista solo il nome del tag, la data di tag e tag messaggio per tutti i tag utilizzando solo la sintassi git.

Ma un semplice grep farà il lavoro:

git show --tags |grep "^tag " -A4

Avviso ho specificare 4 righe di contesto seguente dopo la corrispondenza, in quanto lo standard output mostra il nome di tag, la data di tag e il messaggio tag ciascuno su una linea separata.

Se avete bisogno di gestire i messaggi di tag multilinea io preferirei utilizzare tubazioni per awk che è un po 'più ingombrante:

git show --tags |awk "/^tag /,/-----BEGIN PGP SIGNATURE-----|commit /" |egrep -v "^$" |sed -E "s/^-----BEGIN PGP SIGNATURE-----.*|^commit.*/-/"

Ciò funzionerà fino a quando il messaggio di tag è seguito da PGP SIGNATURE o il messaggio di commit, che sono tutte le possibili situazioni. Tuttavia, puoi facilmente adattare l'ultimo grep per coprire altre situazioni (se ci dovessero essere).

+0

Ho creato il mio tag con la funzione Github Releases usando il suo tagname creato automaticamente (il commit sha). Su quel repository, il comando sopra non funziona, non ottengo output dal grep e tonnellate di output inutile dal git show --tags. Grazie per l'idea! – AnneTheAgile

18

Si desidera utilizzare il comando for-each-ref. Sfortunatamente, è leggermente meno user friendly di filter-branch

Si noti che le informazioni come la data del tag e il tagger sono disponibili solo per i tag annotati.

Di seguito è riportato un prototipo di base. Nota che il formato = può essere un intero script di shell e probabilmente dovrebbe dipendere da quanto complicato vuoi l'output. Hanno un paio di esempi appositamente per i tag in the for-each-ref documentation

git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags 
+0

Con un tag creato tramite Github Releases con il nome del tag generato automaticamente, questo mostra il messaggio di commit dal commit correlato, non il messaggio dal tag che è stato digitato nella GUI. Questo mi indica che Github non sta usando il tag git -a, ma piuttosto un altro metodo? – AnneTheAgile

+0

Sembra un tag non annotato. Questi semplicemente memorizzano un puntatore allo SHA. –

+0

non sembra supportare le opzioni di formato git-log, come% <(N) per l'output tabulare –

0

Questo è piuttosto un follow-up domanda a Andrew's risposta, un po 'diverso, ma argomento correlato.

git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags

Questa grande opera sulla linea di comando diretta. Quando imposto un alias git in ~/.gitconfig, non sembra che sprigioni lo stesso output.

Quando richiamato direttamente dalla riga di comando, ottengo.

package-release-14.7.2 Wed Dec 3 14:24:38 2014 -0800 14.7.2: copia per tag package-release-14.7.2
package-release-14.7.3 gio 4 dic 14: 14:55 2014 -0800 14.7.3: copia per tag pacchetto-release-14.7.3
package-release-14.7.4 Fri Dic 5 16:16:40 2014 -0800 14.7.4: copia per tag pacchetto-release -14.7.4

E quando invoco un git alias (taghist = for-each-ref --format = "% (refname: short)% (taggerdate)% (subject)% (body)" rif/tag), Ottengo

package-release-14.7.2
package-release-14.7 .3
pacchetto-release-14.7.4

-San

+1

Usa \ "invece di", quindi modifica questo per fornire una risposta su come farlo in un alias poiché altrimenti non è t una risposta –

+0

taghist = for-each-ref --format = \ "% (refname: short)% (taggerdate)% (subject)% (body) \" refs/tags – San