¿Puedo hacer que git imprima nombres de tags de estilo xyz en un order razonable?

Considere esta list de numbers de versión:

0.3.0 0.3.1 ... 0.3.8 0.3.9 0.3.10 0.3.11 

git tag imprimiría en el siguiente order:

 0.3.0 0.3.1 0.3.10 0.3.11 0.3.2 ... 

¿Hay alguna forma de hacer que la git tag imprima en order 'numérico' en lugar de order alfabético? O una solución temporal, ¿tal vez un progtwig al que puedo canalizar la salida para pedirles cómo quiero?

Una solución más fácil:

 serv ~: echo -e "1.1.1\n1.3.2\n1.1.10\n1.1.2" | sort -V 1.1.1 1.1.2 1.1.10 1.3.2 

Desglose de las opciones de sort que se utilizan aquí:

  • -V orderar por versión
 serv ~: echo -e "1.1.1\n1.3.2\n1.1.10\n1.1.2" | sort -n -t. -k1,1 -k2,2 -k3,3 1.1.1 1.1.2 1.1.10 1.3.2 

Desglose de las opciones de sort que se utilizan aquí:

  • -n – ordera utilizando el order numérico de cadenas (por lo tanto, 10 viene después de 1 )
  • -t. – use períodos como separadores de campo
  • -k1,1 define una key de sorting en el primer campo (y solo en el primer campo)
  • -k2,2 define una key de sorting en el segundo campo (y solo el segundo campo)
  • -k3,3 define una key de sorting en el tercer campo (y solo el tercer campo)

Pronto (con Git 1.9.x / 2.0, Q2 2014) podrá usar git solo para get la salida correcta:

Ver commit b6de0c6 , del commit 9ef176b , escrito por Nguyễn Thái Ngọc Duy ( pclouds ) :

  --sort=<type> 

Ordenar en un order específico .
El tipo admitido es:

  • " refname " (order lexicográfica),
  • " version:refname " o " v:refname " (los nombres de las tags se tratan como versiones).

Prefijo " - " para invertir el order de sorting.


En tu caso:

  git tag -l --sort=version:refname 

Algunos casos de testing:

 git tag foo1.3 && git tag foo1.6 && git tag foo1.10 

Esto es lo que obtendrías:

 # lexical sort git tag -l --sort=refname "foo*" foo1.10 foo1.3 foo1.6 # version sort git tag -l --sort=version:refname "foo*" >actual && foo1.3 foo1.6 foo1.10 # reverse version sort git tag -l --sort=-version:refname "foo*" >actual && foo1.10 foo1.6 foo1.3 # reverse lexical sort git tag -l --sort=-refname "foo*" >actual && foo1.6 foo1.3 foo1.10