Eu preciso de alguma maneira de listar todas as tags no meu sistema na data em que foram criadas, mas não tenho certeza se posso obter esses dados via git-log. Ideias?
Eu preciso de alguma maneira de listar todas as tags no meu sistema na data em que foram criadas, mas não tenho certeza se posso obter esses dados via git-log. Ideias?
Respostas:
A classificação por data de criação das tags funciona com tags leves e anotadas:
git for-each-ref --sort=creatordate --format '%(refname) %(creatordate)' refs/tags
git for-each-ref --format="%(taggerdate): %(refname)" --sort=-taggerdate --count=10 refs/tags
fiz exatamente o que eu precisava. Obrigado!
%(contents)
para adicionar na anotação, se necessário, por exemplogit for-each-ref --sort='*authordate' --format='%(taggerdate:short) | %(tag) | %(contents)' refs/tags
git for-each-ref --sort=taggerdate --format '%(tag)'
--sort=creatordate
funciona para tags anotadas e não anotadas, mas --sort=taggerdate
parece funcionar apenas com tags anotadas. testado usandogit version 2.16.3
O Git 2.8 (março de 2016) documenta outra opção que remonta ao git 1.4.4 (outubro de 2006) .
Consulte commit e914ef0 (05 de janeiro de 2016) por Eric Wong ( ele828
) .
(Mesclado por Junio C Hamano - gitster
- no commit 108cb77 , 20 de janeiro de 2016)
Veja o novo Documentation/git-for-each-ref.txt
Para objetos de confirmação e marcação, os campos especiais
creatordate
ecreator
corresponderão à tupla de data ou nome-email-data apropriada dos camposcommitter
outagger
, dependendo do tipo de objeto.
Eles destinam-se a trabalhar em uma mistura de tags anotadas e leves .
Então, usando creatordate
funciona com tags:
git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }'
Ou:
git tag --sort=-creatordate
Como detalho em " Como classificar as tags git por ordem de sequência de versões do formulário rc-XYZW? ", Você pode adicionar uma ordem de classificação git tag
(desde Git 2.0, junho de 2014).
Essa ordem de classificação inclui como nome do campo (listado em git for-each-ref
) taggerdate . Isso permite git tag --sort=taggerdate
(mencionado por DarVar abaixo )
Como exemplo, no git/git
repo ele irá listar o v2.10.0
tag última:
v2.9.1
v2.9.2
v2.9.3
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.10.0
O pedido padrão não ( git tag
):
v2.1.2
v2.1.3
v2.1.4
v2.10.0
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.2.0
creatordate
!
git log --tags --simplify-by-decoration --pretty="format:%ci %d"
Também uma boa saída de (sem campo de data):
git log --tags --decorate --simplify-by-decoration --oneline
Para ver o histórico completo com dependências e confirmações lineares distribuídas (apenas eventos essenciais, como marcação e ramificação / mesclagem):
git log --graph --decorate --simplify-by-decoration --oneline --all
git log --tags --simplify-by-decoration --pretty="format:%ci %d" | grep "tag:"
e funciona melhor para mim.
git tag --sort=-taggerdate
De acordo com a página do manual, "Prefixo - para classificar em ordem decrescente do valor".
git tag
usa as mesmas chaves de classificação git-for-each-ref
que é onde as chaves estão documentadas.
Este one-liner exibe datas e tags sem qualquer problema.
git tag --format='%(creatordate:short)%09%(refname:strip=2)'
Resultado:
2015-04-01 storaged-2.0.0
2015-06-11 storaged-2.1.0
2015-08-06 storaged-2.1.1
...
Se você não gosta de como as tags são classificadas por padrão, pode classificar por data com a opção --sort=creatordate
, por exemplo. Veja a resposta do VonC para mais detalhes.
Para que as tags anotadas e leves sejam classificadas por completo, com base na data de confirmação, estou usando:
git for-each-ref --format='%(*committerdate:raw)%(committerdate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }'
Este comando listará todas as tags e o ID do objeto de confirmação associado, em ordem cronológica.
O seguinte depende do commit, portanto, não importa se ele possui informações de data com o commit:
git log --tags --decorate --simplify-by-decoration|grep ^commit|grep tag|sed -e 's/^.*: //' -e 's/)$//' -e 's/,.*$//'|tac
A resposta acima, de Josh Lee, depende de uma data de tag para que o pedido seja correto.
tac
- pode alterá-lo para more
. De qualquer forma, seu comando funcionou muito bem - obrigado!
Com base nos métodos mencionados anteriormente, eu também queria ver a data real da tag na lista e, portanto, minha versão em uso é:
git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(creatordate:short) %(refname) %(*objectname) %(objectname)' refs/tags | sort -n | awk '{ print $3, $5, $4 }'