2012-11-03 13 views
50

Ho un progetto che utilizza git e ha contrassegnato tutte le versioni con un tag.Ottieni l'ora e la data dei tag git

$ git tag 
v1.0.0 
v1.0.1 
v1.0.2 
v1.0.3 
v1.1.0 

Il mio obiettivo è elencare le versioni e le date di rilascio in un'interfaccia Web (tag/commit date = release date). Attualmente elenchiamo tutte le versioni usando git tag.

Come posso ottenere l'ora e la data per quando è stato effettuato il tag (o il commit a cui punta)?

+1

E 'bene precisare qui che è la data di commit del tag che siete dopo. Come tag non ha data. – jobwat

+0

Possibile duplicato di [Come posso elencare tutti i tag nel mio repository Git entro la data in cui sono stati creati?] (Https://stackoverflow.com/questions/6269927/how-can-i-list-all-tags-in- my-git-repository-by-the-date-they-were-created) –

risposta

35

utilizzare l'argomento --format-git log:

git log -1 --format=%ai MY_TAG_NAME 
+2

SUGGERIMENTO - Sostituisci "TAG" con il nome del tag. Ad esempio, 'git log -1 --format =% ai v0.2.3'. – Tobias

+2

Se vuoi ISO8601, esegui '--format =% aI' (capitale" I ") –

56

Questo sempre lavorato per me:

git log --tags --simplify-by-decoration --pretty="format:%ci %d" 

di consultare la sezione "Formati PRETTY" della pagina man git-log per i dettagli della stringa di formato se si desidera una diversa formattazione della data.

+6

Per essere avvisati, questo elencherà la data/ora per il commit, ma non la data/ora per il tag annotato. – WiSaGaN

+2

... che mi piace –

+0

Basta inserire 'taglog = log --tags --simplify-by-decoration --pretty = 'formato:% ci% d'' (notare le virgolette singole, NON doppie) nel [alias] sezione del tuo file .gitconfig e ora hai un comando git taglog :) – Lambart

20

nota che entrambe le soluzioni sopra farti la data, che può essere molto diversi rispetto a quando che commettono è stato taggato per il rilascio di impegnarsi. Per ottenere la data del tag stesso, devi trovare il tag stesso con rev-parse, leggerlo con cat-file e quindi analizzarlo. Un po 'oleodotto:

git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'

+0

Buono, solo il problema è che il risultato non è formattato (1419372909 -0300) –

1

si può usare gawk (non awk) per convertire la data nella riga "Tagger" a qualcosa di leggibile:

git rev-parse v4.4-rc1 | xargs git cat-file -p | gawk '/^tagger/ { print strftime(PROCINFO["strftime"], $(NF-1)) }' 

se uno non piace gawk poi date può essere utilizzato per convertire il tempo unix:

git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print "@" $(NF-1) }' | xargs date -d 

ed esame PLE (dnsmasq git repo):

$ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print "@" $(NF-1) }' | xargs date -d 
Wed May 18 16:52:12 CEST 2016 
+0

provi questo da te? –

+0

sicuramente. funziona, 'dnsmasq' git repo, ad esempio: ' $ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/{print strftime (PROCINFO ["strftime"], $ (NF-1))}' ' ' Mer 18 maggio 16:52:12 CEST 2016' – vladis

1

Non esiste alcuna opzione semplice al comando git tag per fare questo. Ho trovato più conveniente per eseguire

git log --decorate=full 

per elencare tutti i commit compresi i tag se ce ne sono alcuni.Della messa in vendita impegna solo che sono contrassegnati uso

git log --decorate=full --simplify-by-decoration 

Per i dettagli usano

git help log 
7

Un'altra opzione:

git for-each-ref --format="%(refname:short) | %(creatordate)" refs/tags/* 

Vedi https://git-scm.com/docs/git-for-each-ref#_field_names per opzioni di formato

%(creatordate) dà la data di il commit ha indicato, per vedere la data in cui il tag è stato creato utilizzare %(taggerdate)

è possibile incorporare direttamente il guscio:

$> git for-each-ref --shell --format="ref=%(refname:short) dt=%(taggerdate:format:%s)" refs/tags/* 

ref='v1.10' dt='1483807817' 
ref='v1.11' dt='1483905854' 
ref='v1.12.0' dt='1483974797' 
ref='v1.12.1' dt='1484015966' 
ref='v1.13' dt='1484766542' 
ref='v1.2' dt='1483414377' 
ref='v1.3' dt='1483415058' 
ref='v1.3-release' dt='' <-- not an annotated tag, just a pointer to a commit so no 'taggerdate', it would have a 'creator date'. 
ref='v1.3.1' dt='1483487085' 
ref='v1.4' dt='1483730146' 
ref='v1.9' dt='1483802985' 
+2

Questa è la migliore risposta per ottenere il tag Data. –

+0

In alternativa, puoi ottenere il timestamp di unix con 'git for-each-ref --format ="% (taggerdate: unix) "refs/tags" o come sottostringa in 'git for-each-ref --format ="% (taggerdate: raw) "refs/tags' –

+0

Grazie! Tutte le altre risposte forniscono solo la data di commit e non la data del tag. – Sam

Problemi correlati