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)?
Respuestas:
Utilice el
--format
argumento paragit log
:fuente
git log -1 --format=%ai v0.2.3
,.--format=%aI
("I" mayúscula)git log -1 --format=%ai MY_TAG_NAME | cat
desactivar la vista de páginagit log
que 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.Esto siempre funcionó para mí:
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.
fuente
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 :)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'
fuente
git for-each-ref --format="%(taggerdate:unix)" refs/tags
o como subcadena engit for-each-ref --format="%(taggerdate:raw)" refs/tags
git tag --format "%(refname:short) %(creatordate:short)"
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 con
rev-parse
, leerlacat-file
y luego analizarla. Una pequeña tubería:git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'
fuente
No hay una opción simple en el comando git tag para hacer esto. Encontré más conveniente para correr
para enumerar todas las confirmaciones, incluidas las etiquetas, si las hay. Para enumerar solo las confirmaciones que están etiquetadas, use
Para detalles use
fuente
se puede usar
gawk
(noawk
) para convertir la fecha en la línea "etiquetador" en algo legible por humanos:si uno no le gusta
gawk
,date
se puede usar para convertir el tiempo unix:y ejemplo (
dnsmasq
git repo):fuente
dnsmasq
git 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