2014-10-29 15 views
6

Ich habe viele Fernbedienungen meinem git hinzugefügt. Jede Fernbedienung ist ein Repository für einen Entwickler. Jeden Tag ich fetch --all, um neue Zweige zu sehen, die sie erstellen, die bereit sind, zu überprüfen.Wie man einige Zweige/Tags ignoriert, die zu lokalem git kopiert werden, wenn git fetch --alle

Entwickler können jedoch "private" Zweige an die Fernbedienung schieben. Angenommen, alle Zweige, die mit einem Unterstrichpräfix benannt sind, können nicht überprüft werden, während andere Zweige zur Überprüfung bereit sind.

Wenn ich die git fetch --all mache, wird mein Git-Diagramm (von /libexec/git-core/git-gui) alle Zweige sehen, egal ob sie das Unterstrich-Präfix haben oder nicht. Es kompliziert die Grafik.

Ich möchte git fetch ignorieren diese _XXXX Zweige von meiner lokalen git heruntergeladen werden. Also, wenn ich das git Diagramm sehen, es ist wie:

  • Zweige Shows:RemoteA/Branch1, RemoteB/Branch1, RemoteB/Branch2
  • Ignoriert Zweige:RemoteA/_Branch2, RemoteB/_Branch3

Wie kann ich das tun?

Antwort

5

Statt eine ‚_‘ Namenskonvention zu verwenden, können Sie Namespaces verwenden, schieben die Niederlassung in origin/review/Branch1 (git push Branch1:review/Branch1)
(genannt „Gruppe“ in that answer oder „hierarchische Zweignamen (Zweignamen mit Schrägstrich) in that answer)

auf diese Weise müssen Sie nur holen, was in der „Überprüfung‘ Namespace ist:

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

die einzige andere op tion wäre ein Skript sein, das würde:

+0

aber wie für alle remote zu tun? git fetch + refs/heads/review/*: refs/remotes/origin/review/* bedeutet, dass ich RemoteA in den Befehl eingeben muss, um den 'Ursprung' zu ersetzen. Ähnliches, aber Arbeit für --all? –

+0

@palazzotrain Sie müssen alle Ihre Fernbedienung (aufgelistet durch 'git remote') durchlaufen: leicht skriptfähig. – VonC

2

Sie es in einer tun könnten Schritt mit einem Alias. Fügen Sie diese auf Ihre ~/.gitconfig Datei:

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

Und dann nur git fall sagen. Es löscht alle Remote-Zweige, die /_ enthalten.

Sie können die Komplexität von Aliasen, die Shell-Befehle sind, beobachten. : -/

+0

Das scheint eine andere gute Option zu sein. +1 – VonC

-1

Sie die ignore-refs Option verwenden:

git fetch --ignore-refs branch123 
+0

Ich benutze Git 2.8.4, veröffentlicht nach diesem Post, aber ich habe nicht die Option "Ignorieren-Refs". Ich habe etwas gegoogelt, und die einzigen Referenzen, die ich dazu habe [sind für 'git svn'.] (Http://git.661346.n2.nabble.com/PATCH-git-svn-Allow-certain-refs-to -be-ignored-td6867817.html) – Michael

3

auf VonC's answer mit einem speziellen "Überprüfung" Ordner Expanding , können Sie Ihre .git/config 's-Einträge für Ihre Mitarbeiter' Fernbedienungen ändern.Hier ist the relevant documentation.

Wo es einmal war

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

Sie können es

[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 

Nach tun zu

ändern, können Sie die Verweise bereinigen, müssen Sie Refs haben bereits geholt, aber future git fetch --all s oder git fetch fred s aktualisiert nichts außerhalb der von Ihnen angegebenen Muster.


Oder wie viele spezielle oder interessante Ordner/Zweige, wie Sie benötigen.

+0

Interessante Ergänzung zu meiner Antwort. +1 – VonC