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)?

HNygard
fuente
2
Es bueno precisar aquí que es la fecha de confirmación de la etiqueta que busca. Como una etiqueta no tiene fecha.
jobwat
1
@jobwat etiquetas anotadas hacer tener una fecha .
chrstphrchvz

Respuestas:

71

Utilice el --formatargumento para git log:

git log -1 --format=%ai MY_TAG_NAME
usuario4815162342
fuente
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.

Nikos C.
fuente
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'
no secuenciador
fuente
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 '>'

Rob Shearer
fuente
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
VojtaK
fuente
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
Vladis
fuente
¿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