Obtenga la hora y la fecha de las etiquetas git


88

Tengo un proyecto que usa git y he etiquetado todos los lanzamientos con una etiqueta.

$ git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.1.0

Mi objetivo es enumerar los lanzamientos y las fechas de lanzamiento en una interfaz web (etiqueta / fecha de confirmación = fecha de lanzamiento). Actualmente enumeramos todos los lanzamientos usando git tag.

¿Cómo puedo obtener la hora y la fecha de cuando se creó la etiqueta (o la confirmación a la que apunta)?


2
Es bueno precisar aquí que es la fecha de confirmación de la etiqueta que busca. Como una etiqueta no tiene fecha.
jobwat


Respuestas:


71

Utilice el --formatargumento para git log:

git log -1 --format=%ai MY_TAG_NAME

3
SUGERENCIA - Reemplace "TAG" con el nombre de la etiqueta. Por ejemplo git log -1 --format=%ai v0.2.3,.
Tobias

5
Si desea ISO8601, hágalo --format=%aI("I" mayúscula)
Jaim Eliyah

git log -1 --format=%ai MY_TAG_NAME | catdesactivar la vista de página
elinx

¿Qué está haciendo "-1"?
Blademaster

@Blademaster Indica git logque se muestre solo una confirmación, la que pertenece a la etiqueta. El comportamiento predeterminado es mostrar todas las confirmaciones desde la especificada hasta la primera confirmación en el repositorio.
user4815162342

83

Esto siempre funcionó para mí:

git log --tags --simplify-by-decoration --pretty="format:%ci %d"

Consulte la sección "PRETTY FORMATS" de la página de manual de git-log para obtener detalles de la cadena de formato si desea un formato de fecha diferente.


13
Sin embargo, para ser advertido, esto mostrará la fecha / hora de confirmación, pero no la fecha / hora de la etiqueta anotada.
WiSaGaN

5
Simplemente coloque taglog = log --tags --simplify-by-decoration --pretty='format:%ci %d'(tenga en cuenta las comillas simples, NO las comillas dobles) en la sección [alias] de su archivo .gitconfig, y ahora tiene un comando git taglog :)
Lambart

40

Una opción más:

git for-each-ref --format="%(refname:short) | %(creatordate)" "refs/tags/*"

Consulte https://git-scm.com/docs/git-for-each-ref#_field_names para conocer las opciones de formato

%(creatordate) da la fecha de la confirmación señalada, para ver la fecha en que se creó la etiqueta en el uso %(taggerdate)

Puedes incorporar el caparazón directamente:

$> git for-each-ref --shell --format="ref=%(refname:short) dt=%(taggerdate:format:%s)" "refs/tags/*"

ref='v1.10' dt='1483807817'
ref='v1.11' dt='1483905854'
ref='v1.12.0' dt='1483974797'
ref='v1.12.1' dt='1484015966'
ref='v1.13' dt='1484766542'
ref='v1.2' dt='1483414377'
ref='v1.3' dt='1483415058'
ref='v1.3-release' dt='' <-- not an annotated tag, just a pointer to a commit so no 'taggerdate', it would have a 'creator date'.
ref='v1.3.1' dt='1483487085'
ref='v1.4' dt='1483730146'
ref='v1.9' dt='1483802985'

3
Esta es la mejor respuesta para obtener la fecha de la etiqueta.
Joseph K. Strauss

Alternativamente, puede obtener la marca de tiempo de Unix con git for-each-ref --format="%(taggerdate:unix)" refs/tagso como subcadena engit for-each-ref --format="%(taggerdate:raw)" refs/tags
RD

1
¡Gracias! Todas las otras respuestas solo dan la fecha de confirmación y no la fecha de la etiqueta.
Sam

Sí, definitivamente es la mejor respuesta, ya que solo muestra las etiquetas reales, no todas las confirmaciones, es una pena que SO tiene otras respuestas con una calificación más alta.
samthebest

2
mismo resultado con menos escritura:git tag --format "%(refname:short) %(creatordate:short)"
Andrew Spencer

27

Tenga en cuenta que las dos soluciones anteriores le brindan la fecha de confirmación, que puede ser muy diferente a la fecha en la que se etiquetó para su lanzamiento. Para obtener la fecha de la etiqueta en sí, debe buscar la etiqueta conrev-parse , leerla cat-filey luego analizarla. Una pequeña tubería:

git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'


Bueno, el único problema es que el resultado no está formateado (1419372909-0300)
Jose_GD

Una vez que tenga el ID de confirmación de rev-parse, creo que puede hacer: git rev-parse v1.0.0 | xargs git show -s --pretty =% aI
Keith

@Keith Ahora ha vuelto a mostrar la fecha del autor de la confirmación en lugar de la fecha etiquetada, al menos para las etiquetas anotadas
Ben

3

No hay una opción simple en el comando git tag para hacer esto. Encontré más conveniente para correr

git log --decorate=full

para enumerar todas las confirmaciones, incluidas las etiquetas, si las hay. Para enumerar solo las confirmaciones que están etiquetadas, use

git log --decorate=full --simplify-by-decoration

Para detalles use

git help log

2

se puede usar gawk(no awk) para convertir la fecha en la línea "etiquetador" en algo legible por humanos:

git rev-parse v4.4-rc1 | xargs git cat-file -p | gawk '/^tagger/ { print strftime(PROCINFO["strftime"], $(NF-1)) }'

si uno no le gusta gawk, datese puede usar para convertir el tiempo unix:

git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print "@" $(NF-1) }' | xargs date -d

y ejemplo ( dnsmasqgit repo):

$ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print "@" $(NF-1) }' | xargs date -d
Wed May 18 16:52:12 CEST 2016

¿Intentas esto desde tu lado?
Vishal Patel

seguramente. funciona, dnsmasqgit repo, por ejemplo: $ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print strftime(PROCINFO["strftime"], $(NF-1)) }' Wed May 18 16:52:12 CEST 2016
vladis
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.