
Palazzo-Zug
Ich habe viele Fernbedienungen zu meinem Git hinzugefügt. Jede Fernbedienung ist ein Repository für einen Entwickler. Jeden Tag ich fetch --all
um alle neu erstellten Branches zu sehen, die zur Überprüfung bereit sind.
Entwickler können jedoch “private” Branches auf die Remote übertragen. Angenommen, alle Zweige, die mit einem Unterstrich-Präfix benannt sind, sind nicht zur Überprüfung bereit, während andere Zweige zur Überprüfung bereit sind.
Beim Tun der git fetch --all
mein Git-Graph (von /libexec/git-core/git-gui
) sehen alle Branches, egal ob sie den Unterstrich als Präfix haben oder nicht. Das verkompliziert die Grafik.
Ich will git fetch
diese zu ignorieren _XXXX
Branches nicht auf mein lokales Git heruntergeladen werden. Wenn ich mir also das Git-Diagramm ansehe, sieht es so aus:
- Zeigt Zweige:
RemoteA/Branch1
, RemoteB/Branch1
, RemoteB/Branch2
- Ignoriert Verzweigungen:
RemoteA/_Branch2
, RemoteB/_Branch3
Wie kann ich das machen?

Michael
Update für Git v2.29.0
Mit negative Refspecs,1 in Git v2.29 hinzugefügt, können Sie Ihre ursprüngliche Absicht erreichen, ohne die Gewohnheiten Ihrer Mitarbeiter zu ändern.
Fügen Sie für die Fernbedienung jedes Kollegen eine negative Refspec hinzu (d. h. mit dem Präfix ^
) ausschließen _
-vorangestellte Zweige. Dies ist lose angepasst von der Unit-Test für .git/config
und die für negative Muster. Siehe die letzte Zeile im Codeblock unten für “Freds” Fernbedienung.
[remote "fred"]
url = something.git
fetch = +refs/heads/*:refs/remotes/fred/*
fetch = ^refs/heads/_*
Sie haben zwei Möglichkeiten, dies festzulegen fred
auf der Kommandozeile:
git config --add remote.fred.fetch '^refs/heads/_*'
git remote set-branches --add fred '^refs/heads/_*'
Ursprüngliche Antwort
Erweitern Sie die ausgezeichnete Antwort von VonC um einen speziellen „Rezension“-Ordner,2 Sie können Ihre ändern .git/config
‘s-Einträge für die Fernbedienungen Ihrer Kollegen. Hier ist die entsprechende Dokumentation.
Wo es einmal war
[remote "fred"]
url = something.git
fetch = +refs/heads/*:refs/remotes/fred/*
Sie können es zu ändern
[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
Danach müssen Sie möglicherweise die Verweise auf Refs bereinigen, die Sie bereits abgerufen haben, aber in der Zukunft liegen git fetch --all
s oder git fetch fred
s aktualisiert nichts außerhalb der von Ihnen angegebenen Muster.
1 Am 23.02.2022 gibt es immer noch keine Dokumentation zu negativen Refspecs, daher ist der beste Ort, um nachzusehen in der Geschichte von Git oder in der Antwort von VonC auf eine andere Frage, wo er die relevanten Teile zusammenzieht.
2 Oder so viele spezielle oder interessante Ordner und Zweige, wie Sie brauchen.

VonC
Anstatt ein ‘_
‘ Namenskonvention könnten Sie Namensräume verwenden und den Zweig hineinschieben origin/review/Branch1
(git push Branch1:review/Branch1
)
(in dieser Antwort als “Gruppe” oder in dieser Antwort als “hierarchischer Zweigname (Zweignamen mit Schrägstrich)” bezeichnet)
Auf diese Weise müssen Sie nur abrufen, was sich im Namespace “review” befindet:
git fetch +refs/heads/review/*:refs/remotes/origin/review/*
Die einzige andere Option wäre ein Skript, das Folgendes tun würde:
- Listen Sie die entfernten Zweige auf (ohne etwas abzurufen):
git ls-remote origin
- Holen Sie für jeden Zweig mit dem richtigen Namen nur diesen Zweig

SzG
Sie könnten dies in einem Schritt mit einem Alias tun. Fügen Sie dies zu Ihrem hinzu ~/.gitconfig
Datei:
[alias]
fall = !sh -c 'git fetch --all && git branch -r | sed /HEAD/d | grep /_ | xargs git branch -dr' --
Und dann einfach sagen git fall
. Es löscht alle entfernten Zweige, die enthalten /_
.
Sie können die Feinheiten von Aliasnamen beobachten, die Shell-Befehle sind. :-/

Dinesh
Du könntest die verwenden ignore-refs
Möglichkeit:
git fetch --ignore-refs branch123
10112200cookie-checkÜberspringen Sie das Kopieren einiger Branches/Tags in lokales Git mit `git fetch –all`yes
Mehr dazu negative Referenzspez eingeführt mit Git 2.29 (Q4 2020), siehe „Git – Was ist „Refspec““.
– VonC
9. Oktober 2020 um 21:03 Uhr
Tatsächlich
git fetch --all
bedeutet Abrufen von allen entfernten Zweigen, wenn Sie mehr als einen haben, nicht von allen entfernten Branches/Tags. Letzteres wird tatsächlich von den Abrufspezifikationen gesteuert, also in+refs/heads/*
das*
bedeutet, alle Köpfe von dieser Fernbedienung abzurufen. Sie können also entweder die gewünschten explizit angeben oder eine negative Abrufspezifikation mit Git 2.29+ verwenden– Ryenus
4. November 2020 um 3:18 Uhr