Ho bisogno di un modo per elencare tutti i tag nel mio sistema entro la data in cui sono stati creati, ma non sono sicuro di poter ottenere quei dati tramite git-log. Idee?
Ho bisogno di un modo per elencare tutti i tag nel mio sistema entro la data in cui sono stati creati, ma non sono sicuro di poter ottenere quei dati tramite git-log. Idee?
Risposte:
L'ordinamento per data di creazione del tag funziona con tag annotati e leggeri:
git for-each-ref --sort=creatordate --format '%(refname) %(creatordate)' refs/tags
git for-each-ref --format="%(taggerdate): %(refname)" --sort=-taggerdate --count=10 refs/tags
fatto esattamente quello di cui avevo bisogno. Grazie!
%(contents)
per aggiungere annotazioni se necessario, ad esgit for-each-ref --sort='*authordate' --format='%(taggerdate:short) | %(tag) | %(contents)' refs/tags
git for-each-ref --sort=taggerdate --format '%(tag)'
--sort=creatordate
funziona sia --sort=taggerdate
con tag con annotazioni che con tag non annotati , ma sembra funzionare solo con tag con annotazioni. testato usandogit version 2.16.3
Git 2.8 (marzo 2016) documenta un'altra opzione risalente a git 1.4.4 (ottobre 2006) .
Vedi commit e914ef0 (05 gen 2016) di Eric Wong ( ele828
) .
(Unita da Junio C Hamano - gitster
- in commit 108cb77 , 20 gen 2016)
Vedi il nuovo Documentation/git-for-each-ref.txt
Per gli oggetti commit e tag, i campi speciali
creatordate
ecreator
corrisponderanno alla data appropriata o alla tupla nome-e-mail-data dai campicommitter
o intagger
base al tipo di oggetto.
Sono pensati per lavorare su un mix di tag annotati e leggeri .
Quindi l'utilizzo creatordate
funziona con i tag:
git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }'
O:
git tag --sort=-creatordate
Come dettagliato in " Come ordinare i tag git in base all'ordine delle stringhe di versione del modulo rc-XYZW? ", È possibile aggiungere un ordinamento a git tag
(da Git 2.0 giugno 2014).
Tale ordinamento include come nome campo (elencato in git for-each-ref
) taggerdate . Ciò consente git tag --sort=taggerdate
(menzionato da DarVar di seguito )
Ad esempio, nel git/git
repository elencherà il v2.10.0
tag per ultimo:
v2.9.1
v2.9.2
v2.9.3
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.10.0
L'ordine predefinito non sarebbe ( 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"
Bello anche l'output da (senza campo data):
git log --tags --decorate --simplify-by-decoration --oneline
Per visualizzare la cronologia completa con dipendenze e commit lineari con striping (solo eventi essenziali, come tag e branching / fusione):
git log --graph --decorate --simplify-by-decoration --oneline --all
git log --tags --simplify-by-decoration --pretty="format:%ci %d" | grep "tag:"
e funziona meglio per me.
git tag --sort=-taggerdate
Secondo la pagina man, "Prefisso - per ordinare in ordine decrescente del valore".
git tag
usa le stesse chiavi di ordinamento di git-for-each-ref
, che è dove sono documentate le chiavi.
Questo one-liner mostra date e tag senza problemi.
git tag --format='%(creatordate:short)%09%(refname:strip=2)'
Produzione:
2015-04-01 storaged-2.0.0
2015-06-11 storaged-2.1.0
2015-08-06 storaged-2.1.1
...
Se non ti piace il modo in cui i tag sono ordinati per impostazione predefinita, puoi ordinare per data con l'opzione --sort=creatordate
, ad esempio. Vedi la risposta VonC per maggiori dettagli.
Per avere tag annotati e tag leggeri ordinati del tutto, in base alla data di commit, sto usando:
git for-each-ref --format='%(*committerdate:raw)%(committerdate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }'
Questo comando elencherà ogni tag e l'id dell'oggetto commit associato, in ordine cronologico.
Quanto segue si basa sul commit, quindi non importa se ha informazioni sulla data con il commit:
git log --tags --decorate --simplify-by-decoration|grep ^commit|grep tag|sed -e 's/^.*: //' -e 's/)$//' -e 's/,.*$//'|tac
La risposta sopra di Josh Lee si basa su una data tag per ottenere l'ordine corretto.
tac
: potrebbe cambiarlo in more
. Comunque il tuo comando ha funzionato benissimo - grazie!
Basandomi sui metodi menzionati in precedenza, volevo vedere anche la data effettiva del tag nell'elenco, quindi la mia versione in uso è:
git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(creatordate:short) %(refname) %(*objectname) %(objectname)' refs/tags | sort -n | awk '{ print $3, $5, $4 }'