2010-11-11 12 views
37

Nelle righe seguenti:"git descrivere" ignora un tag

$ git tag -n1 
v1.8  Tagged the day before yesterday 
v1.9  Tagged yesterday 
v2.0  Tagged today 
$ git describe 
v1.9-500-ga6a8c67 
$ 

qualcuno può spiegare il motivo per cui il tag v2.0 non viene utilizzato da "git descrivere", e come risolvere questo problema? Il tag v2.0 è già stato inserito, quindi suppongo che non sia possibile eliminarlo e riaggiungerlo.

+0

Vedere anche https://stackoverflow.com/questions/33851344/git-describe-fails-to-return-most-recent-annotated-tag – caw

risposta

48

git describe utilizza solo tag annotati per impostazione predefinita. specificare l'opzione --tags per utilizzare anche tag leggeri

assicurarsi di aver estratto il commit corretto (git rev-parse HEAD). i tag annotati vengono creati con git tag -a. se fai git show <tagname> e vedi solo il commit, è un tag leggero, se vedi un tag tag aggiuntivo è un tag annotato.

+5

"git describe --tags" produce lo stesso risultato di sopra. – knipknap

+0

puoi anche provare '--all' per far sì che utilizzi tutti i riferimenti. è HEAD descritto dal tag? (per sicurezza) – knittl

+0

"git Descrive --all" stampa "heads/master". Il tag v2.0 viene applicato sul ramo principale. (Suppongo che significhi che descrive HEAD?) – knipknap

13

Quando questo è successo a noi, è stato il caso di due tag applicati per lo stesso commit. Potete trovare se questo è il caso eseguendo

# git log --oneline --decorate=short 
deba4b4 (tag: v1.1.0.20.0, tag: v1.1.0.19.0) 001 New buildnumber 

Qui ci sono due tag, uno per la versione 19 e l'altro per 20. 20 è stato taggato dopo il 19, ma per lo stesso commettono. In questo caso, descrivono tornato

# git describe --tags 
v1.1.0.19.0 

Non so il motivo per cui ha fatto questo, ma è così che sembra funzionare con tag duplicati.

Un altro caso in cui questo potrebbe accadere è se si ha un tag che è più "vicino" a voi in un ramo. Questo caso è stato spiegato in this blog post.

+0

Ho riscontrato un problema simile, quindi ho pensato che il modo migliore sarebbe quello di evitare la creazione di tag duplicati con annotazioni. Sai come potrei riuscirci? –

+0

@jbucaran Suppongo che avresti bisogno di eseguire un controllo e quindi taggare o meno i tag in base a ciò. sarebbe probabilmente argomento per un'altra domanda – eis

6

La questione è git tag spettacoli tutti tag in tutti i rami, mentre git describe usa solo i tag su commit che sono disponibili nella corrente ramo.

Ecco un esempio (il motivo per cui sono venuto qui in realtà):

$ git tag | tail -n3 
v0.4.0 
v0.4.1 
v0.4.2 

mostra l'ultima tag disponibile è v0.4.2, ma questo è la mia uscita di git describe:

$ git describe --tags 
v0.4.0-2-acd334c 

I Sono in sviluppo ramo. Quando ho scavare nel registro, vedo infatti le più recenti non sono disponibili tag sul ramo corrente:

$ git log --oneline --decorate=short | grep '\(tag\:' | head -n3 
acd334c (tag: v0.4.0) Merge pull request #1061 
988fe5e (tag: v0.3.6) Merge pull request #859 
5f97274 (tag: v0.3.5) Merge pull request #646 

Quindi, nel mio caso, gli sviluppatori hanno deciso di creare un nuovo ramo rilascio esclusivamente per la codifica stampa che risultati che il ramo di sviluppo non è più aggiornato con i tag.

Spero che questo aiuti e grazie @eis per l'idea con il controllo dei registri.