¿Cómo enumerar todas las etiquetas junto con el mensaje completo en git?

360

Quiero que git enumere todas las etiquetas junto con la anotación completa o el mensaje de confirmación. Algo como esto está cerca:

git tag -n5

Esto hace exactamente lo que quiero, excepto que solo se mostrará hasta las primeras 5 líneas del mensaje de etiqueta.

Supongo que puedo usar un número muy grande. ¿Cuál es el número más alto que puedo usar aquí? ¿Es lo mismo en todas las computadoras?

ACTUALIZACIÓN : He tenido mucho tiempo para pensar en esto, y ahora creo que no necesariamente quiero mostrar la totalidad de cada mensaje si algunos de ellos son extraordinariamente largos. Realmente no tenía ninguna necesidad particular que me obligara a ver mensajes masivos (aparte de mi propia propensión a quedarme sin aliento en todo lo que escribo, incluidos los mensajes de etiqueta). Simplemente no me gustó la idea de que no necesariamente iba a mostrarme el mensaje completo, ya que eso me hizo sentir que me estaba ocultando información. Pero demasiada información también puede ser algo malo.

still_dreaming_1
fuente
6262
git tag -nlo hizo por mí
Martin Berger
11
git tag -nsolo imprime la primera línea de la anotación, de acuerdo con la página del manual.
Paul Price
@INTPner, de acuerdo, la etiqueta -l se usa para enumerar etiquetas con un patrón específico. Editando la respuesta.
Zubair

Respuestas:

349

Pruebe esto, enumerará todas las etiquetas junto con anotaciones y 9 líneas de mensaje para cada etiqueta:

git tag -n9

también puede usar

git tag -l -n9

si se van a enumerar etiquetas específicas:

git tag -l -n9 v3.*

(por ejemplo, el comando anterior solo mostrará etiquetas que comiencen con "v3")

-l, --list Lista de etiquetas con nombres que coinciden con el patrón dado (o todos si no se da ningún patrón). Ejecutar "git tag" sin argumentos también enumera todas las etiquetas. El patrón es un comodín de shell (es decir, emparejado usando fnmatch (3)). Se pueden dar múltiples patrones; Si alguno de ellos coincide, se muestra la etiqueta.

Zubair
fuente
66
Esto solo imprimirá la primera línea de cada anotación.
Paul Price
3
@Paul Price: solo usted tiene una anotación, de lo contrario imprime el mensaje de confirmación. De acuerdo, esta no es la respuesta.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
3
Según la documentación, la -lopción es filtrar por un patrón. No veo cómo eso sería útil aquí. ¿Me estoy perdiendo de algo?
still_dreaming_1
2
@INTPnerd sí, -laquí es totalmente superfluo
Lambart
1
@ P.MyerNore Debe estar usando una versión extraña de git o pasar argumentos adicionales para hacer algo más de lo que esta pregunta hace. Pero es bueno saber que para ciertas situaciones se necesita -l.
still_dreaming_1
119
git tag -n99

Corto y dulce. Esto enumerará hasta 99 líneas de cada anotación de etiqueta / mensaje de confirmación. Aquí hay un enlace a la documentación oficial de git tag .

Ahora creo que la limitación de mostrar solo hasta 99 líneas por etiqueta es realmente buena, ya que la mayoría de las veces, si hubiera realmente más de 99 líneas para una sola etiqueta, realmente no querría ver el resto de las lineas tu? Si desea ver más de 99 líneas por etiqueta, siempre puede aumentar esto a un número mayor.

Quiero decir, supongo que podría haber una situación o razón específica para querer ver mensajes de etiquetas masivas, pero ¿en qué punto no quieres ver el mensaje completo? ¿Cuándo tiene más de 999 líneas? 10.000? 1,000,000? Mi punto es que, por lo general, tiene sentido tener un límite en la cantidad de líneas que vería, y este número le permite configurarlo.

Como estoy argumentando lo que generalmente quieres ver al mirar tus etiquetas, probablemente tenga sentido establecer algo como esto como un alias (del comentario de Iulian Onofrei a continuación):

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

Quiero decir, realmente no quieres tener que escribir git tag -n99cada vez que solo quieres ver tus etiquetas, ¿verdad? Una vez que se configura ese alias, cada vez que quiera ver sus etiquetas, simplemente escriba git tagsen su terminal. Personalmente, prefiero ir un paso más allá y crear alias de bash aún más abreviados para todos mis comandos de uso común. Para ese propósito, puede agregar algo como esto a su archivo .bashrc (funciona en Linux y entornos similares):

alias gtag='git tag -n99'

Luego, cuando quiera ver sus etiquetas, simplemente escriba gtag. Otra ventaja de recorrer el camino del alias (ya sea git alias o bash alias o lo que sea) es que ahora tiene un lugar donde puede agregar más personalizaciones a su forma personal, generalmente desea que se le muestren sus etiquetas (como ordenar ellos de ciertas maneras como en mi comentario a continuación, etc.). Una vez que superes el apuro de crear tu primer alias, ahora te darás cuenta de lo fácil que es crear más de ellos para otras cosas que te gusta trabajar de forma personalizada, como git log, pero guardemos ese para una pregunta / respuesta diferente .

still_dreaming_1
fuente
3
git config --global alias.tags 'tag -n99'
Iulian Onofrei
@IulianOnofrei, bien, no sabía que git te permitía definir alias. Me doy cuenta de que esto está fuera de tema, pero no puedo resistirme. Esto es lo que estoy usando ahora (colocado en su .bashrc o algo así):alias gtag='git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags | sort -V'
still_dreaming_1
25

La respuesta de Mark Longair (usando git show) está cerca de lo que se desea en la pregunta. Sin embargo, también incluye el commit señalado por la etiqueta, junto con el parche completo para ese commit. Dado que el commit puede no estar relacionado con la etiqueta (es solo un commit que la etiqueta intenta capturar), esto puede ser indeseable. Creo que lo siguiente es un poco mejor:

for t in `git tag -l`; do git cat-file -p `git rev-parse $t`; done
Paul Price
fuente
El programa git de Mark no mostró parches para mi uso. Su comando omite -p o --patch, pero para estar totalmente seguro de omitir el diff, se puede usar: --no-patch. (en git v2.7.1 / mac)
AnneTheAgile
13

Está lejos de ser bonito, pero podría crear un script o un alias que haga algo como esto:

for c in $(git for-each-ref refs/tags/ --format='%(refname)'); do echo $c; git show --quiet "$c"; echo; done
Mark Longair
fuente
¿Hay una razón para no sustituir git for-each-ref refs/tags/ --format='%(refname)'con git tag -l?
Shai Berger
@ShaiBerger: en la práctica, no lo creo, creo que solo pensaba que git tages de porcelana y de git for-each-reffontanería, por lo que la salida de este último debería ser más estable para las secuencias de comandos.
Mark Longair
10

Último mensaje de etiqueta solamente:

git cat-file -p $(git rev-parse $(git tag -l | tail -n1)) | tail -n +6
gaRex
fuente
2
Para cualquier otra persona que esté pasando esto desde google: Si desea mostrar el mensaje de una etiqueta en particular: git cat-file -p <tag> | tail -n +6
Kit Peters
6

Use la opción --format

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

Prefiero hacer esto en la línea de comando, pero si no le importa una interfaz web y usa GitHub, puede visitar https://github.com/user/repo/tagsy hacer clic en "..." al lado de cada etiqueta para mostrar su anotación.

agouge
fuente