Pregunta `git tag` ordenada en orden cronológico de la fecha de la confirmación señalada


El resultado de git tag está ordenado alfabéticamente Me gustaría ordenarlo cronológicamente (la fecha de las confirmaciones a las que están asignadas, no la fecha en la que se crearon), de lo contrario, la salida debería permanecer igual.

He intentado la sugerencia de http://networkadmin20.blogspot.de/2010/08/howto-list-git-tags-by-date.html, pero el orden sigue siendo el mismo

Para asegurarme de que no es un error con mi repositorio, intenté lo siguiente con un repositorio limpio:

soeren@ubuntu ~/Projects/sandbox % mkdir chronogit
soeren@ubuntu ~/Projects/sandbox % cd chronogit 
soeren@ubuntu ~/Projects/sandbox/chronogit % git init
Initialized empty Git repository in /home/soeren/Projects/sandbox/chronogit/.git/
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % touch a
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git add a
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'a'
[master (root-commit) f88e0e9] a
 0 files changed
 create mode 100644 a
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git tag 'A-first'
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git mv a b
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'c'
[master ecc0c08] c
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a => b (100%)
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git tag 'C-second'
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git mv b c
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git commit -m 'b'
[master e72682d] b
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename b => c (100%)
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git tag 'B-third'
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git tag
A-first
B-third
C-second
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git for-each-ref refs/tags --sort=taggerdate --format="%(refname:short)"
A-first
B-third
C-second

El resultado deseado es:

A-first
C-second
B-third

o, dado que invertirlo no debería ser demasiado difícil:

B-third
C-second
A-first

Editar: Como se señaló en los comentarios, esta pregunta es bastante similar, así que probé lo siguiente:

soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git log --tags --simplify-by-decoration --pretty="format:%ai %d"          
2013-09-06 16:08:43 +0200  (HEAD, B-third, master)
2013-09-06 16:08:21 +0200  (C-second)
2013-09-06 16:07:42 +0200  (A-first)

El orden está bien, pero ahora estoy peleando con el formato ...

soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git log --tags --simplify-by-decoration --pretty="format:%(refname:short)"
%(refname:short)
%(refname:short)
%(refname:short)
soeren@ubuntu ~/Projects/sandbox/chronogit (git)-[master] % git log --tags --simplify-by-decoration --format="%(refname:short)" 
%(refname:short)
%(refname:short)
%(refname:short)

25
2017-09-06 14:16


origen


Respuestas:


Acabo de probar con git 2.8.0:

git tag --sort=committerdate

Para obtener una lista completa de los nombres de los campos que puede usar, vea https://git-scm.com/docs/git-for-each-ref#_field_names

Para los objetos de compromiso y etiqueta, el especial creatordate y creator los campos corresponderán con la fecha o tuple de fecha de correo electrónico correspondiente de los campos committer o tagger dependiendo del tipo de objeto. Estos están diseñados para trabajar en una combinación de etiquetas anotadas y livianas.

Campos que tienen una tupla name-email-date como su valor (author, committery tagger) puede ser un sufijo con name, emaily date para extraer el componente nombrado.


21
2018-04-15 00:54



En git 2.3.3 puedo hacer esto para ordenarlos por fecha:

git tag --sort version:refname

PD: Para el registro, también respondí lo mismo en una duplicar pregunta


20
2018-04-13 08:44



git tag | xargs -I@ git log --format=format:"%ai @%n" -1 @ | sort | awk '{print $4}'

15
2017-09-09 06:42



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

5
2018-05-01 14:01



Prueba esto:

git for-each-ref --sort=taggerdate --format '%(refname) %(taggerdate)' refs/tags

Funciona perfectamente y muy rápido para mí.

Referirse a ¿Cómo puedo listar todas las etiquetas en mi repositorio de Git para la fecha en que fueron creadas?


1
2017-12-20 10:21