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?
Antworten
Zu viele Anzeigen?- Wählen Sie eine
<remote_name>
die Sie verwenden möchten (Sie können dieorigin
und überspringen Sie Schritt 1). git remote add <remote_name> <remote_url>
git fetch <remote_name> <branch>
- Wählen Sie eine
<your_local_branch_name>
die Sie verwenden möchten. Könnte dasselbe sein wie<branch>
. git checkout <remote_name>/<branch> -b <your_local_branch_name>
Ich hoffe, das hilft!
Die Antwort hängt davon ab, was Sie erreichen wollen.
-
Wenn es sich um einen einmaligen Vorgang aus einem anderen Repository handelt und Sie keine Referenz benötigen (z. B. zum Zusammenführen von GitHub Pull Requests, bei denen <remote_url> so lautet https://github.com/USER/REPO.git ), dann können Sie verwenden:
git checkout -b <local_branch> <local_branch_to merge_into> git pull <remote_url> <remote_branch>
-
Wenn Sie den Zweig aktualisieren und nachverfolgen wollen, müssen Sie zuerst die Fernbedienung einstellen, und es gibt 4 Alternativen:
-
Wenn Sie ein neues Repository klonen (z. B. nur daran arbeiten)
git clone --single-branch --branch remote_branch remote_url
-
Wenn Sie eine neue Fernbedienung zu Ihrem Arbeitsverzeichnis hinzufügen
# multiple -t options are allowed git remote add -t <remote_branch> <remote_repo> <remote_url>
-
Wenn Sie die Zweigbeschränkung zu einer bestehenden Remote in Ihrem Arbeitsverzeichnis hinzufügen
# with --add it will add the branch instead of setting it # you can add multiple branches with multiple --add lines # wildcards are allowed, # e.g. branch_v\* matching branch_v1, branch_v2, ... git remote set-branches [--add] <remote_repo> <remote_branch>
-
Sie können die Einschränkungen auch weglassen, da clone standardmäßig nur den Hauptzweig abruft und remote add keine Zweige abruft. Aber dann müssen Sie den entfernten Zweig jedes Mal erwähnen, wenn Sie den remote_repo abrufen.
git remote add <remote_repo> <remote_url>
Nach dem Einstellen des Remote-Zweigs können Sie den Remote-Zweig abrufen, auschecken und ziehen:
# If you set only one <remote_branch> in the restrictions above (i.e no option 4), # then you can omit it and still only <remote_branch> will be fetched git fetch <remote_repo> [<remote_branch>] # without -b the local branch name is guessed to be the same as the remote one git checkout --track [-b <local_branch>] <remote_repo>/<remote_branch>
-
Der beste Befehl, um einen entfernten Standort und die Zweige, die bereits geholt wurden oder noch geholt werden, zu überprüfen, ist git remote show <remote_repo>
. Es gibt die Liste der Zweige unter "Entfernter Zweig:" aus und sagt Ihnen auch, ob sie abgerufen wurden und ob sie verfolgt werden.
Sie können die Zweigbeschränkungen in einem entfernten Zweig auch überprüfen, indem Sie die bekannten entfernten Zweige mit git branch -r
in Verbindung mit grep
wenn Sie viele Remotes haben, oder indem Sie die Details der Remotes in der Git-Konfigurationsdatei überprüfen .git/config
. Er wird einen Abschnitt wie diesen enthalten:
[remote "<remote_repo>"]
url = <remote_url>
fetch = +refs/heads/<remote_branch>:refs/remotes/<remote_repo>/<remote_branch>
Durch Bearbeiten der Konfigurationsdatei lassen sich die Einschränkungen ändern, aber ich stimme @alexk zu, dass dies keine gute Idee ist.
HINWEIS: Wenn ein Zweig nicht in der Liste der Zweige einer Gegenstelle enthalten ist (sichtbar in git remote show
oder die Konfigurationsdatei), dann können Sie keinen Verweis darauf haben, git speichert sie im temporären FETCH_HEAD und Sie können sie nicht nachverfolgen oder sie direkt in git checkout
. Dies ist das Problem, das mich zu diesem Thread gebracht (das Gegenteil von dem, was in der Frage): Ich habe ein Repo mit dem GitHub-Client geklont gh repo clone USER/REPO
und es fügte automatisch "upstream" hinzu, das Repository, von dem gegabelt wurde, beschränkt auf den Zweig "master". Ich war nicht in der Lage, andere Zweige auszuchecken und bekam Fehler wie "fatal: '<remote_repo>/<remote_branch>' is not a commit and a branch '<local_branch>' cannot be created from it". Ich habe es behoben mit: git remote set-branches <remote_repo> \*
.
- See previous answers
- Weitere Antworten anzeigen
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.