Com o Git 2.0 (junho de 2014), você poderá especificar uma ordem de classificação!
Consulte commit b6de0c6 , do commit 9ef176b , de autoria de Nguyễn Thái Ngọc Duy ( pclouds
) :
--sort=<type>
Classifique em uma ordem específica .
O tipo suportado é:
- "
refname
" (ordem lexicográfica),
- "
version:refname
" ou " v:refname
" (nomes de tag são tratados como versões).
Anexe " -
" para inverter a ordem de classificação.
Então, se você tem:
git tag foo1.3 &&
git tag foo1.6 &&
git tag foo1.10
Aqui está o que você obteria:
# lexical sort
git tag -l --sort=refname "foo*"
foo1.10
foo1.3
foo1.6
# version sort
git tag -l --sort=version:refname "foo*"
foo1.3
foo1.6
foo1.10
# reverse version sort
git tag -l --sort=-version:refname "foo*"
foo1.10
foo1.6
foo1.3
# reverse lexical sort
git tag -l --sort=-refname "foo*"
foo1.6
foo1.3
foo1.10
Desde o commit b150794 (por Jacob Keller, git 2.1.0, agosto de 2014), você pode especificar essa ordem padrão:
tag.sort
Esta variável controla a ordem de classificação das tags quando exibidas por git-tag
.
Sem a --sort=<value>
opção " " fornecida, o valor desta variável será usado como o padrão.
comentários de robinst :
a ordem de classificação da versão agora pode (Git 2.1+) ser configurada como padrão:
git config --global tag.sort version:refname
Conforme observado por Leo Galleguillos nos comentários :
Para configurar o Git para mostrar as tags mais recentes primeiro ( ordem decrescente ), basta adicionar um hífen antes da versão .
O comando se torna:
git config --global tag.sort -version:refname
Com Git 2.4 (2º trimestre de 2015) , a versionsort.prerelease
variável de configuração pode ser usada para especificar o que v1.0-pre1
vem antesv1.0
.
Veja o commit f57610a de Junio C Hamano ( gitster
) .
Observação (veja abaixo) versionsort.prereleaseSuffix
agora (2017) é um alias obsoleto para versionsort.suffix
.
git 2.7.1 (fevereiro de 2016) melhorará a git tag
própria produção .
Consulte o commit 0571979 (26 de janeiro de 2016) e o commit 1d094db (24 de janeiro de 2016) de Jeff King ( peff
) .
(Fundido por Junio C Hamano - gitster
- no commit 8bad3de , 01 de fevereiro de 2016)
tag
: não mostra nomes de tag ambíguos como " tags/foo
"
Desde b7cc53e ( tag.c
: use ' ref-filter
' APIs, 2015-07-11), git tag
começou a mostrar tags com nomes ambíguos (ou seja, quando " heads/foo
" e " tags/foo
" existem) como " tags/foo
" em vez de apenas " foo
".
Isso é ambos:
- sem sentido; a saída de "
git tag
" inclui apenas refs/tags
, portanto, sabemos que " foo
" significa aquela em " refs/tags
".
- e ambíguo; na saída original, sabemos que a linha "
foo
" significa que " refs/tags/foo
" existe. Na nova saída, não está claro se queremos dizer " refs/tags/foo
" ou " refs/tags/tags/foo
".
A razão disso acontecer é que o commit b7cc53e mudou git tag
para usar a %(refname:short)
formatação de saída " " do filtro ref , que foi adaptado de for-each-ref
. Este código mais geral não sabe que nos preocupamos apenas com as tags e usa shorten_unambiguous_ref
para obter o short-name
.
Precisamos dizer a ele que nos preocupamos apenas com " refs/tags/
" e que deve ser reduzido em relação a esse valor.
vamos adicionar um novo modificador à linguagem de formatação, " strip
", para remover um conjunto específico de componentes de prefixo.
Isso corrige " git tag
" e permite que os usuários invoquem o mesmo comportamento de seus próprios formatos personalizados (para " tag
" ou " for-each-ref
"), deixando " :short
" com o mesmo significado consistente em todos os lugares.
Se strip=<N>
for anexado, <N>
remove os componentes do caminho separados por barra da frente do refname (por exemplo,%(refname:strip=2)
transforma refs/tags/foo
em foo
.
<N>
Deve ser um número inteiro positivo.
Se um ref exibido tiver menos componentes do que <N>
, o comando aborta com um erro.
Para git tag
, quando não especificado, o padrão é %(refname:strip=2)
.
Atualizar Git 2.12 (primeiro trimestre de 2017)
Consulte commit c026557 , commit b178464 , commit 51acfa9 , commit b823166 , commit 109064a , commit 0c1b487 , commit 9ffda48 , commit eba286e (08 de dezembro de 2016) por SZEDER Gábor ( szeder
) .
(Incorporado por Junio C Hamano -gitster
- no commit 1ac244d , 23 de janeiro de 2017)
versionsort.prereleaseSuffix
é um alias obsoleto para versionsort.suffix
.
O prereleaseSuffix
recurso de comparação de versão que é usado em " git tag -l
" não funcionava corretamente quando dois ou mais pré-lançamentos para o mesmo lançamento estavam presentes (por exemplo 2.0
, quando,, 2.0-beta1
e 2.0-beta2
estão lá e o código precisa ser comparado 2.0-beta1
e 2.0-beta2
).
git tag -l --sort=version:refname "rc-*"
e obter a saída que deseja. veja minha resposta abaixo