425 Stimmen

Wie kann ich nur einen Zweig eines entfernten Git-Repositorys abrufen?

Ich möchte einen einzelnen Zweig (nicht alle) eines entfernten Repositorys erfassen und einen lokalen Verfolgungszweig erstellen, der weitere Aktualisierungen dieses entfernten Zweigs verfolgen kann. Die anderen Zweige des entfernten Repositorys sind sehr groß, so dass ich sie nicht abrufen möchte. Wie kann ich das tun?

3 Stimmen

Ein Git-Klon holt sich das gesamte Repository, einschließlich aller Zweige. Sie können flache Kopien erstellen, aber dabei können Sie nur die Anzahl der Revisionen angeben, nicht aber die Zweige.

2 Stimmen

Git clone nimmt nur master. git fetch nimmt alle Zweige

0 Stimmen

"Ein Git-Klon holt das gesamte Repository, einschließlich aller Zweige" - das stimmt nicht unbedingt, wenn Sie genau einen Zweig holen, holt Git alle Repository-Objekte, die Vorfahren des Zweigs sind. Viele andere Zweige bleiben möglicherweise unberücksichtigt. Repositorys mit vielen Zweigen (Tausende) können die Latenzzeit verbessern, indem nur bestimmte Zweige geholt werden.

384voto

git fetch <remote_name> <branch_name>

Hat bei mir funktioniert.

38 Stimmen

Ich habe soeben erfahren, dass der abgeholte Zweig verfügbar ist als FETCH_HEAD nach dem Abholen. Danke!

16 Stimmen

Puis git checkout FETCH_HEAD zur Kasse

4 Stimmen

Wie erhält man <remote_name>?

142voto

MrMadsen Punkte 2403

Ich weiß, dass es schon viele Antworten gibt, aber das sind die Schritte, die bei mir funktioniert haben:

  1. git fetch <remote_name> <branch_name>
  2. git branch <branch_name> FETCH_HEAD
  3. git checkout <branch_name>

Diese basieren auf der Antwort von @Abdulsattar Mohammed, dem Kommentar von @Christoph zu dieser Antwort und diesen anderen Stack Overflow-Fragen und deren Antworten:

11 Stimmen

Die nützlichste Antwort hier IMO

0 Stimmen

Dies schlägt wie folgt fehl, wenn der Zweig bereits lokal existiert: fatal: A branch named '<branch_name>' already exists. Daher habe ich Folgendes bereitgestellt verbesserte Lösung auf der Grundlage Ihres Vorschlags.

0 Stimmen

Dies ist die einzige Antwort, die auch bei mir funktioniert hat.

93voto

hcs42 Punkte 12948

Eine Möglichkeit ist die folgende:

git fetch <remotename> <remote branch>:refs/remotes/<remotename>/<local branch>

Eine Nachverfolgung ist damit jedoch nicht möglich.

Weitere Informationen finden Sie unter die Dokumentation von git fetch .

EDITAR : Wie @user1338062 Hinweise unten : Wenn Sie nicht bereits einen lokalen Klon des Repositorys haben, zu dem Sie den neuen Zweig hinzufügen wollen, sondern ein neues lokales Repository erstellen wollen, dann ist der git clone --branch <branch_name> --single-branch <repo_url> bietet eine kürzere Lösung.

1 Stimmen

Danke, das ist genau das, worum der Betreiber gebeten hat. Um einen Verfolgungszweig zu erstellen git checkout -t <ferner Zweig>/<Zweigname> <Zweigname>

11 Stimmen

Wenn ich einfach tue git checkout <branchname> Ich sehe, dass Git automatisch den Tracking-Zweig einrichtet, wenn der einzige Zweig mit diesem Namen der Remote-Zweig ist.

1 Stimmen

Dies war die einzige Sache, die für mich gearbeitet. obwohl die Konfiguration eingestellt war, um nur Refs für einen einzelnen Zweig zu holen, zog es immer noch Refs zu allen Zweigen mit Fetch oder Pull. dieser Befehl zog nur den Zweig, den ich wollte, so dass das Repo nur 500kb nicht 5mb war. danke.

48voto

Ikar Pohorský Punkte 4073

Um eine bestehende Fernbedienung zu aktualisieren, um nur bestimmte Zweige zu verfolgen, verwenden Sie:

git remote set-branches <remote-name> <branch-name>

De git help remote :

set-branches
    Changes the list of branches tracked by the named remote. This can be used to track a subset of the available remote branches
    after the initial setup for a remote.

    The named branches will be interpreted as if specified with the -t option on the git remote add command line.

    With --add, instead of replacing the list of currently tracked branches, adds to that list.

4 Stimmen

Erstaunlich, ich war in einer --single-branch Repository und konnte später keine weiteren Zweige herunterladen. Danke!

34voto

klode Punkte 10411

Eine Möglichkeit, dies zu tun:

in .git/config fetch für das entfernte Repository sollte so eingestellt sein, dass jeder Zweig geholt wird:

   [remote "origin"]
            fetch = +refs/heads/*:refs/remotes/origin/*

um den entfernten Zweig zu holen:

git fetch origin branch-name

um einen lokalen Zweig 'branch-name' zu erstellen, der so eingerichtet ist, dass er den entfernten Zweig 'branch-name' vom Ursprung verfolgt.

git checkout -b branch-name origin/branch-name

alle Zweigstellen auflisten

git branch -a

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X