2009-09-24 17 views
56

C'è un modo per ottenere il tag associato a un numero di commit in Git?Trova informazioni sui tag per un determinato commit

Per le versioni di solito taggo con qualcosa come v1.1.0. Durante il mio script di build sto creando un file fwVersion.c che contiene le informazioni git attuali. Attualmente, ho commit e informazioni sul ramo nel file, ma vorrei aggiungere il tag.

È possibile?

risposta

73

Controllare la documentazione per git describe. Trova il tag più vicino ad un dato commit (cioè un tag che punta ad un antenato del commit) e descrive il commit in termini di tag.

Se desideri solo sapere se il commit viene puntato da un tag, allora è possibile controllare l'output di:

git describe --exact-match <commit-id> 
+0

Questo è perfetto, grazie !! – wes

+13

'git Descrivi --tags ' per i tag non annotati –

+1

Amo questo. Parlando in particolare, mi piace il fatto che riesca a ottenere un umano leggibile dalla revisione attuale: 'git Descrivi --all --exact-match \' git rev-parse HEAD \ '' – dsummersl

12

È possibile trovare queste informazioni nel manuale

git tag --contains <commit> 
+2

Questo elencherà tutti i tag che contengono il commit specificato (cioè tag che puntano ai figli del commit specificato), quindi non darà necessariamente un singolo tag per un dato commit o qualsiasi informazione su quale tag è più vicino , a meno che la lista contenga solo un singolo commit. –

+3

Come dice Charles Bailey sopra, non è esattamente quello che sto cercando. Forse dovresti RTFM :) – wes

+1

Beh, mi dispiace per la risposta sbagliata. Quando ho controllato sembrava fare ciò che stavi chiedendo. Ho fatto RTFM, stavo solo risolvendo il problema sbagliato. Hope Bailey ha offerto una soluzione che ti aiuta. – dharga

46

Se quello che vuoi è il primo tag che contiene il commit poi:

git describe --contains <commit> 

dà la migliore risposta IMO. Se si hanno tag frequenti rispetto all'utilizzo di "git tag - contain" su un vecchio commit in un repository di grandi dimensioni, può richiedere un po 'di tempo per essere eseguito e fornisce tutti i tag che contengono quel commit.

Questa forma di git describe viene eseguita molto rapidamente e fornisce un singolo valore di output, che è il primo tag contenente il commit e quanto indietro è il commit.

6

Siamo spiacenti, non sapevo come aggiungere solo un commento in modo da inviare una risposta ... ho trovato la combinazione di entrambi i piani di rispondere a darmi quello che volevo in questo modo:

git describe --tags --exact-match <commit-id> 

Questo dà tu i tag che sono SOLO per quel commit e per quelli senza annotazione. Utile quando vuoi trovare tag e non preoccuparti di togliere la formattazione (per esempio per Jenkins).

es. $ git describe --tags --exact-match head~2

Ti dà:

$ ReleaseBeta 
8

ne dici di questo?

git tag --points-at <commit-id>

ti dà tutti i tag della data commettere ha (mentre git describe ti dà solo uno), e non include i tag sul discendente impegna (come git tag --contains fa).