2014-10-29 15 views
6

Ho molti remoti aggiunti al mio git. Ogni remoto è un repository per uno sviluppatore. Ogni giorno ho fetch --all per vedere tutti i nuovi rami che creano che sono pronti per la revisione.Come ignorare alcuni rami/tag che vengono copiati in git locale quando do git fetch --all

Tuttavia, gli sviluppatori possono inviare rami "privati" al telecomando. Supponiamo che tutti i rami con un prefisso di sottolineatura non siano pronti per la revisione, mentre altri rami sono pronti per la revisione.

Quando si esegue il git fetch --all, il mio grafico git (di /libexec/git-core/git-gui) vedrà tutti i rami, indipendentemente dal fatto che abbiano il prefisso di sottolineatura o meno. Complifica il grafico.

Desidero che git fetch ignori le filiali _XXXX da scaricare nel mio git locale. Così, quando ho visualizzare il grafico git è come:

  • Spettacoli rami:RemoteA/Branch1, RemoteB/Branch1, RemoteB/Branch2
  • ignora rami:RemoteA/_Branch2, RemoteB/_Branch3

Come posso fare questo?

risposta

5

Invece di utilizzare un '_' convenzione di denominazione, è possibile utilizzare gli spazi dei nomi, spingendo la filiale di origin/review/Branch1 (git push Branch1:review/Branch1)
(denominato "gruppo" in that answer, o "nome del ramo gerarchico (nomi filiali con barra) in that answer)

questo modo, si hanno solo per andare a prendere ciò che è nella rivista' namespace":

git fetch +refs/heads/review/*:refs/remotes/origin/review/* 

l'unico altro op zione sarebbe uno script, che sarebbero:

+0

ma come fare per tutto il telecomando? git fetch + refs/heads/review/*: refs/remotes/origin/review/* significa che devo digitare RemoteA nel comando per sostituire 'origine'. Qualcosa di simile ma funziona --all? –

+0

@palazzotrain è necessario eseguire il loop su tutto il telecomando (elencato da 'git remote'): facilmente scrivibile. – VonC

2

Si potrebbe farlo in un passo con un alias. Aggiungere questo al file ~/.gitconfig:

[alias] 
    fall = !sh -c 'git fetch --all && git branch -r | sed /HEAD/d | grep /_ | xargs git branch -dr' -- 

E poi basta dire git fall. Cancellerà tutti i rami remoti che contengono /_.

È possibile osservare la complessità degli alias che sono comandi della shell. : -/

+0

Sembra un'altra buona opzione. +1 – VonC

-1

È possibile utilizzare l'opzione ignore-refs:

git fetch --ignore-refs branch123 
+0

Sto usando git 2.8.4, rilasciato dopo questo post, ma non ho l'opzione 'ignore-refs'. Ho fatto un po 'di ricerca su Google e gli unici riferimenti che ho a [sono per 'git svn'.] (Http://git.661346.n2.nabble.com/PATCH-git-svn-Allow-certain-refs-to -be-ignored-td6867817.html) – Michael

3

Ampliando VonC's answer con uno speciale "recensione" cartella , è possibile modificare 'le voci S per la vostra colleghi dei vostri .git/config telecomandi.Ecco the relevant documentation.

Dove un tempo era

[remote "fred"] 
    url = something.git 
    fetch = +refs/heads/*:refs/remotes/fred/* 

Si può cambiare a

[remote "fred"] 
    url = something.git 
    fetch = +refs/heads/review/*:refs/remotes/fred/review/* 
    fetch = +refs/heads/other_pattern/*:refs/remotes/fred/other_pattern/* 
    fetch = +refs/heads/specific_branch:refs/remotes/fred/specific_branch 

Dopo questo modo, potrebbe essere necessario ripulire i riferimenti per arbitri avete già inverosimile, ma il futuro git fetch --all s o git fetch fred s non aggiornerà nulla al di fuori dei modelli specificati.


o come molte cartelle speciali o interessanti/rami di cui hai bisogno.

+0

Interessante aggiunta alla mia risposta. +1 – VonC