2013-05-21 12 views
48

Al momento ho una configurazione remota git come la seguente:Recupero tutti i tag da un telecomando con git tirare

[remote "upstream"] 
    url = <redacted> 
    fetch = +refs/heads/*:refs/remotes/upstream/* 

Quando ho emettere git pull il maestro ramo, tutte le teste remote vengono prelevati in telecomandi/monte, quindi telecomandi/upstream/master viene unito in master. Anche i tag che possono essere raggiunti vengono recuperati allo stesso tempo, il che è molto conveniente.

Vorrei acquistare tutti i tag dal telecomando, non solo quelli che sono direttamente raggiungibili dalle testine. Inizialmente avevo provato a impostare tagopt == --tags, ma ho scoperto che questo causava il recupero dei soli tag e quindi ha rotto tutto. (Junio ​​dice anche che è un horrendous misconfiguation).

C'è un modo per rendere git pull recuperare tutti i tag remoti per impostazione predefinita, oltre alle teste remote?

+0

Un ricordo a me stesso: assicurarsi che effettivamente spinto prima il tag (non funziona automaticamente): 'git push origine ' – Hafenkranich

+0

L'uso della soluzione' tagopt' non è più un errore di configurazione; [a partire da 1.9/2.0 (Q1 2014)] (https://stackoverflow.com/a/20608181) questo preleverà tutti i tag * in aggiunta * a qualunque cosa venga normalmente recuperata. – mgiuffrida

risposta

44

Dovresti essere in grado di farlo aggiungendo un refspec per i tag alla tua configurazione locale. Concretamente:

[remote "upstream"] 
    url = <redacted> 
    fetch = +refs/heads/*:refs/remotes/upstream/* 
    fetch = +refs/tags/*:refs/tags/* 
+1

Aha, non mi sono mai reso conto che potreste avere più linee di recupero, presumevo che l'ultimo avrebbe appena scavalcato. È molto carino ed esplicito. – jleahy

99

Un semplice git fetch --tags ha funzionato per me.

+1

Questo non fornisce una risposta alla domanda.Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. – Fizzix

+6

@Fizzix Forse il titolo dovrebbe essere modificato per includere "per impostazione predefinita". Questo post ha risposto alla mia domanda. –

+0

Questo non ha funzionato per me. Posso vedere i tag con 'git ls-remote'. – dangeroushobo

5

È semplice. Fare un git

recuperare --all

12

L'opzione --force è utile per rinfrescare i tag locali. Soprattutto se si dispone di tag galleggianti: opzione di tiro

git fetch --tags --force 

GIT ha anche le opzioni --force, e la descrizione è la stessa:

Quando git fetch viene utilizzato con: refspec, si rifiuta di aggiornare il ramo locale a meno che il ramo remoto che recupera sia un discendente di. Questa opzione sovrascrive il controllo .

ma, secondo il documento di --no-tags:

Per impostazione predefinita, i tag che puntano a oggetti che vengono scaricati dal repository remoto sono recuperati e memorizzati localmente.

Se questa affermazione di default non è una restrizione, allora si può anche provare

git pull --force 
Problemi correlati