2011-09-27 15 views
6

Se altri sviluppatori spingono le loro filiali locali su un repository remoto condiviso prima di eseguire il commit su trunk (per condividerli, eseguire il backup o archiviarli centralmente per l'accesso da più macchine), c'è un modo per me di recuperare facilmente le mie filiali o eliminare selettivamente i riferimenti locali alle filiali remote degli altri? In caso contrario, c'è un modo per mostrare solo un sottoinsieme di rami remoti in gitk, così posso vedere dove i miei rami sono relativi ai miei rami remoti, ma non ho il grafico ingombrato dai rami remoti di tutti gli altri?Solo recuperare un sottoinsieme di rami git remoti o visualizzarne solo un sottoinsieme in gitk

+0

spero che sia OK che ho fatto una leggera modifica al titolo, dal momento che un "remote" in Git è un concetto distinto da un ramo in un telecomando - la tua domanda riguarda quest'ultima, e il titolo è stato un po 'fuorviante. –

+0

Parlare di "trunk" nel contesto di Git è un po 'strano, non è vero? – knittl

risposta

5

Ecco un modo di solo recupero rami particolari da un telecomando:

gli arbitri (comprese le filiali) che sono prelevate da un telecomando sono controllati con l'opzione di configurazione remote.<remote-name>.fetch. Ad esempio, il remote.origin.fetch è probabilmente il refspec:

+refs/heads/*:refs/remotes/origin/* 

... il che significa che per fare recuperare i nomi di tutti gli arbitri sotto refs/heads/ nel repository remoto, e renderli disponibili sotto refs/remotes/origin/ nel repository locale. (Lo + significa eseguire aggiornamenti forzati, quindi i rami di monitoraggio remoto possono essere aggiornati anche se l'aggiornamento non è un avanzamento rapido.)

Puoi invece elencare più punti di riferimento che specificano determinati rami da recuperare, ad es. cambiando questo con:

git config remote.origin.fetch +refs/heads/master:refs/remotes/origin/master 
git config --add remote.origin.fetch +refs/heads/blah:refs/remotes/origin/blah 

... e poi la prossima volta solo master e blah sarà recuperato.

Naturalmente, hai già localmente molti rami di localizzazione remota e gitk li mostrerà comunque. È possibile rimuovere ognuno di quelli che non ti interessa con:

git branch -r -d origin/uninteresting 
+0

Invece di eliminare separatamente ogni ramo di tracciamento remoto, dovresti essere in grado di eseguire 'git remote prune origin ', che penso prenda in considerazione fetchspecs – knittl

+0

@knittl: la documentazione non lo suggerisce, e ho appena provato che in git 1.7.0.4, con 'remote.origin.fetch = + refs/heads/master: refs/remotes/origin/master' e non sembra rimuoverli ... –

+0

ok, assunzione errata da parte mia:) sarebbe interessante se si considera il comportamento previsto – knittl

Problemi correlati