Como posso listar todas as tags no meu repositório Git pela data em que foram criadas?
128
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?
Quer dizer que deseja obter a lista de todas as tags na ordem das datas de criação?
Lithuak
3
FYI (1.) Esta pergunta é para listar tags ANOTADOS por data. (2.) Para listar as tags LIGHTWEIGHT por data, clique aqui . (3.) Para um lembrete útil sobre qual é a diferença entre as tags leves e anotadas do Git, acesse aqui .
Trevor Boyd Smith
@TrevorBoydSmith: Isso não está correto. A diferença é que (2) lista todas as tags por data de confirmação do commit marcado , enquanto esta página fornece soluções que classificam por data marcada (embora apenas para tags anotadas, pois o git não armazena a data marcada para tags leves).
David P
Respostas:
174
A classificação por data de criação das tags funciona com tags leves e anotadas:
Impressionante. git for-each-ref --format="%(taggerdate): %(refname)" --sort=-taggerdate --count=10 refs/tagsfiz exatamente o que eu precisava. Obrigado!
Jon Ursenbach
21
Uma solução da @DrorCohen que funciona para tags leves: stackoverflow.com/questions/6900328/… . Colar aqui para fácil referência: git log --tags --simplify-by-decoration --pretty = "format:% ai% d"
Gilead
5
Pode usar %(contents)para adicionar na anotação, se necessário, por exemplogit for-each-ref --sort='*authordate' --format='%(taggerdate:short) | %(tag) | %(contents)' refs/tags
Tim Diggins
7
Ou até um pouco mais limpo:git for-each-ref --sort=taggerdate --format '%(tag)'
Baris Wanschers 08/08
4
--sort=creatordatefunciona para tags anotadas e não anotadas, mas --sort=taggerdateparece funcionar apenas com tags anotadas. testado usandogit version 2.16.3
Para objetos de confirmação e marcação, os
campos especiais creatordatee creatorcorresponderão à tupla de data ou nome-email-data apropriada dos campos committerou tagger, dependendo do tipo de objeto. Eles destinam-se a trabalhar em uma mistura de tags anotadas e leves .
Muito obrigado. Fiquei me perguntando por que algumas datas estavam vazias. Eu já suspeitava de etiquetas leves. Estou feliz por não precisar recriar as tags, graças a creatordate!
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):
Para pessoas preguiçosas: git log --tags --simplify-by-decoration --pretty="format:%ci %d" | grep "tag:"e funciona melhor para mim.
Mateusz
1
Observe que isso é ordenado pela data de confirmação, não pela data em que as tags foram criadas. A resposta (atualmente) com a melhor classificação de Josh Lee faz o pedido até a data em que a tag foi criada.
Nathanial Woolls
13
git tag --sort=-taggerdate
De acordo com a página do manual, "Prefixo - para classificar em ordem decrescente do valor".
git tagusa as mesmas chaves de classificação git-for-each-refque é onde as chaves estão documentadas.
Este é provavelmente o mais correto com base na pergunta. Aqui está o link para a documentação descrevendo os possíveis campos de classificação: git-scm.com/docs/git-for-each-ref
prasanthv
Essa resposta não leva em consideração as tags leves, pois possuem "taggerdate" vazio. Outras respostas com "creatordate" são mais precisas.
morhook 03/06
13
Este one-liner exibe datas e tags sem qualquer problema.
git tag --format='%(creatordate:short)%09%(refname:strip=2)'
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.
Ofuscou um pouco. ... Nas tags anotadas, 'data do emissor' está vazia, enquanto nas tags leves 'taggerdate' está vazia. Portanto, como uma solução alternativa '* committerdate' está dizendo ao Git para voltar a referenciar datas do objeto de confirmação original quando ele é leve. ...
ingyhere
O uso de 'creatordate' deve efetivamente fazer a mesma coisa.
Respostas:
A classificação por data de criação das tags funciona com tags leves e anotadas:
fonte
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
Então, usando
creatordate
funciona com tags:Ou:
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 permitegit tag --sort=taggerdate
(mencionado por DarVar abaixo )Como exemplo, no
git/git
repo ele irá listar ov2.10.0
tag última:O pedido padrão não (
git tag
):fonte
creatordate
!Também uma boa saída de (sem campo de data):
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):
fonte
git log --tags --simplify-by-decoration --pretty="format:%ci %d" | grep "tag:"
e funciona melhor para mim.De acordo com a página do manual, "Prefixo - para classificar em ordem decrescente do valor".
git tag
usa as mesmas chaves de classificaçãogit-for-each-ref
que é onde as chaves estão documentadas.fonte
Este one-liner exibe datas e tags sem qualquer problema.
Resultado:
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.fonte
Para que as tags anotadas e leves sejam classificadas por completo, com base na data de confirmação, estou usando:
Este comando listará todas as tags e o ID do objeto de confirmação associado, em ordem cronológica.
fonte
Com Git
version 2.10.0.windows.1
git tag --sort=taggerdate
fonte
O seguinte depende do commit, portanto, não importa se ele possui informações de data com o commit:
A resposta acima, de Josh Lee, depende de uma data de tag para que o pedido seja correto.
fonte
tac
- pode alterá-lo paramore
. 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 é:
fonte