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.

18voto

AlexK Punkte 141

Die Antwort hängt von der aktuellen Liste der Verfolgungszweige ab, die Sie haben. Sie können einen bestimmten Zweig aus der Ferne abrufen mit git fetch <remote_name> <branch_name> nur wenn der Zweig bereits in der Liste der Verfolgungszweige enthalten ist (Sie können dies mit git branch -r ).

Nehmen wir an, ich habe den Remote-Zweig zuvor mit der Option --single-branch geklont, und in diesem Fall ist der einzige Tracking-Zweig, den ich habe, der "geklonte". Ich bin ein wenig verwirrt von den Ratschlägen, die Git-Konfiguration manuell zu ändern, sowie durch die Eingabe von git remote add <remote_name> <remote_url> Befehle. Da "git remote add" ein neues entferntes Repository einrichtet, funktioniert es offensichtlich nicht mit dem vorhandenen entfernten Repository; die Angabe der Option "-t branch" hat mir nicht geholfen.

Falls die Gegenstelle existiert und der Zweig, den Sie abrufen wollen, in dieser Gegenstelle existiert:

  1. Prüfen Sie mit git branch -r ob Sie diesen Zweig als Verfolgungszweig sehen können. Wenn nicht (wie in meinem Fall mit einem einzelnen Zweigklon), fügen Sie diesen Zweig mit "git remote set-branches" mit der Option --add zur Liste der verfolgenden Zweige hinzu:
  • git remote set-branches --add <remote_name> <branch_name>
  1. Holen Sie den Zweig, den Sie hinzugefügt haben, aus der Ferne:
  • git fetch <remote_name> <branch_name> Hinweis: Erst nachdem der neue Verfolgungszweig von der Gegenstelle geholt wurde, können Sie ihn in der Verfolgungszweigliste mit git branch -r .
  1. Erzeugen Sie einen neuen lokalen Zweig mit "checkout --track", der denselben "branch_name" erhält wie ein Tracking-Zweig:
  • git checkout --track <remote_name>/<branch_name>

17voto

astronaut Punkte 550

Aus dem Beitrag des Autors kopiert:

Verwenden Sie die -t Option zu git remote add , z.B.:

git remote add -t remote-branch remote-name remote-url

Sie können mehrere -t branch Optionen, um mehrere Zweige zu erfassen.

1 Stimmen

Wissen Sie, wie ich weitere Zweige zum Remote hinzufügen und entfernen kann, nachdem ich -t branch verwendet habe?

15voto

ColinM Punkte 12601

Wenn Sie die Voreinstellung für "git pull" und "git fetch" so ändern wollen, dass nur bestimmte Zweige geholt werden, können Sie .git/config so bearbeiten, dass die Fernkonfiguration wie folgt aussieht:

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

Damit wird der Master standardmäßig nur vom Ursprung geholt. Siehe für weitere Informationen: https://git-scm.com/book/en/v2/Git-Internals-The-Refspec

EDIT: Ich habe gerade festgestellt, dass dies dasselbe ist, was die Option -t für git remote add macht. Zumindest ist dies eine nette Möglichkeit, dies zu tun, nachdem die Fernbedienung hinzugefügt wurde, wenn Sie die Fernbedienung nicht löschen und erneut mit -t hinzufügen möchten.

1 Stimmen

Progit.org/book/ch9-5 Link wurde verschoben nach git-scm.com/book/de/Git-Internals-The-Refspec

15voto

user1338062 Punkte 10425

Der Vollständigkeit halber ist hier ein Beispielbefehl für einen neuen Checkout:

git clone --branch gh-pages --single-branch git://github.com/user/repo

Wie bereits in anderen Antworten erwähnt, setzt es remote.origin.fetch wie diese:

[remote "origin"]
        url = git://github.com/user/repo
        fetch = +refs/heads/gh-pages:refs/remotes/origin/gh-pages

13voto

Amitesh Bharti Punkte 10156

Der einfachste Weg, dies zu tun

  git fetch origin <branch> && git checkout <branch>

Beispiel: Ich möchte den uat-Zweig vom Ursprung holen und zu diesem als aktuellen Arbeitszweig wechseln.

   git fetch origin uat && git checkout uat

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