2012-03-12 17 views

risposta

3

git fetch --tags lo farà.

Dalla docs (descrizione del parametro --tags):

La maggior parte dei tag vengono prelevati automaticamente come responsabili di filiali vengono scaricati, ma i tag che non puntano a oggetti raggiungibili dai responsabili di filiali che vengono tracciato non verrà recuperato da questo meccanismo. Questo flag consente di scaricare tutti i tag e i relativi oggetti associati. Il comportamento predefinito per un telecomando può essere specificato con l'impostazione remote..tagopt.

+0

Ma mi chiedo come sovrascrivere i tag locali esistenti, perché sono stati creati erroneamente – linquize

+1

'git fetch --tags' sarà in aggiornamento fatto esistenti variabili locali, ad esempio, se il tag remoto FOO esegue il mapping a 1234567 e il tag locale FOO esegue il mapping a fedcba9, 'git fetch --tags' sostituirà FOO con 1234567. – torek

+0

Aggiornamento: nelle versioni più recenti di git, questo non aggiornerà più i tag locali. Puoi invece forzarli ad aggiornarli, con 'git fetch '+ refs/tags/*: refs/tags/*'' ('--force' potrebbe funzionare anche, ma non l'ho provato). – torek

-1

I tag non verranno sovrascritti, perché sono pensati per essere immutabili. Se vuoi avere un oggetto che sia (realisticamente) modificabile, usa invece un puntatore di ramo o un riferimento. Questo ti lascia: git tag -d tagname ..., e poi recuperarlo di nuovo.

+0

Non sono d'accordo con la tua prima affermazione - Questo potrebbe distorcere l'intero punto di utilizzo di un VCS, non credi? – lightonphiri

+0

Git non incoraggia la riscrittura (già condivisa, remota) della cronologia. Ciò non sconfigge il punto di un VCS - che è quello di mantenere la storia! Nella maggior parte dei casi è possibile forzare tali cose a verificarsi ma può causare parecchi problemi. –

4

git fetch --tags --all --prune

questo vi dirà esplicitamente git per andare a prendere, e, allo stesso tempo, rimuovere i tag che non esistono più sul telecomando.

+1

Questo non sembra rimuovere i tag che sono sempre presenti solo localmente. –

+0

@MartijnHeemels, git non può distinguere tra un tag che non è mai stato premuto e un tag che è stato rimosso dal telecomando. –

0

Innanzitutto, a differenza delle filiali, git non tiene traccia dei tag remoti diversi dai tag locali. Una volta finito di andare a prendere, sono indistinguibili.

  • fa aggiornare il tag locale (anche se il manuale non dice)
    • git fetch --tags
  • non aggiorna il tag locale
    • git fetch
    • git fetch --prune
    • git fetch --prune --force

Un tag di aggiornamento/sovrascrittura appare così:

From git:path/name 
- [tag update]  my_tag -> my_tag 

Questo funziona per i tag leggeri e annotati, anche misti. Cioè: un tag annotato potrebbe essere sovrascritto con uno leggero e viceversa.

ho usato git versione 2.7.4

+0

nota: questo non elimina i tag che sono stati cancellati sul telecomando –

+0

@CarlosHeuberger Il tuo commento suggerisce che credi ci sia un modo per farlo, ma non c'è. Puoi infatti eliminare tutti i tag locali non esistenti sul telecomando, ma elimina anche tag _local che non erano mai sul telecomando affatto (ad esempio non ancora spinti o tag per scopi solo locali). Non c'è modo di cancellare solo i tag che sono stati _deleted sul remote_. –

+0

Non so perché pensi che il mio commento lo stia suggerendo - non ho mai scritto c'è un modo per farlo!?!. Ho solo cercato di completare la tua risposta perché da nessuna parte si afferma che i tag locali non vengono cancellati e "aggiorna il tag locale" potrebbe essere inteso anche come la rimozione di un tag che è stato rimosso sul telecomando. Penso che sia stata una dichiarazione chiara (senza suggerimenti nascosti) ... ma il mio inglese è probabilmente peggio di quanto penso. –

Problemi correlati