2012-05-15 4 views
6

Vorrei sapere se è possibile in Git recuperare un elenco di tag (molto simile al risultato del comando git tag), ma l'elenco dovrebbe essere limitato solo a un determinato ramo.È possibile con Git recuperare un elenco di tag che esiste solo in un determinato ramo?

Se questo è possibile, qualcuno può spiegare come è fatto? Forse con qualche magia di abbinamenti?

+0

Potrei sbagliarmi ma richiede (piccoli) script – CharlesB

+0

Non è sicuro ma è questo ciò che desideri? [elenca i tag contenuti da un ramo] (http://stackoverflow.com/q/2381665/11343) – CharlesB

risposta

5

penso che questo farà ciò che si vuole:

git log --pretty='%H' <branch> | 
    xargs -n1 git describe --tags --exact-match 2>/dev/null 

Questo utilizza git log per ottenere un elenco di commit in un ramo, e poi li passa per git describe per vedere se corrispondono a un tag.

+1

+1, il modo migliore. può essere reso molto più veloce aggiungendo '--simplify-by-decoration' a' git log', dà solo commit che corrispondono a un refspec in modo da non ripetere il ciclo * all * commit – CharlesB

+0

Hey, sto anche cercando un soluzione simile a questa: Ho appena postato una domanda su [link] (http://stackoverflow.com/questions/11316306/listing-the-tags-in-git-from-a-specific-branch) e poi è successo a leggi la tua domanda – iDev

+0

@iDev: Hai provato la soluzione di larsks? Ha funzionato per te? –

2

Un altro approccio sarebbe possibile con le opzioni di nuovo tag git --merged (in git 2.7+, Q4 2015)

git tag --merged <abranchname> 

Vedi commit 5242860, ... (10 settembre 2015) per Karthik Nayak (KarthikNayak).
(fusa per Junio C Hamano -- gitster -- in commit 8a54523 05 ott 2015)

tag.c: implementare '--merged' e le opzioni '--no-fusione'

utilizzare le API 'ref-filter' a implementare le opzioni '--merged' e '--no-merged' in 'tag.c'.

  • L'opzione '--merged' consente all'utente di elencare solo i tag uniti nel commit specificato.
  • L'opzione '--no-merged' consente all'utente di elencare solo i tag non uniti nel commit specificato.

Se non viene fornito alcun oggetto, esso assume HEAD come oggetto.