398 Stimmen

fetch in git erhält nicht alle Zweige

Ich habe ein Repository geklont, woraufhin jemand anderes einen neuen Zweig erstellt hat, an dem ich nun arbeiten möchte. Ich habe das Handbuch gelesen, und es scheint ganz einfach zu sein. Seltsamerweise funktioniert es nicht, und alle Beiträge, die ich gefunden habe, deuten darauf hin, dass ich das Richtige tue. Ich werde mich also der Kritik aussetzen, denn es gibt muss etwas offensichtlich falsch sein:

Die richtige Maßnahme scheint zu sein

git fetch
git branch -a
* master
  remotes/origin/HEAD --> origin/master
  remotes/origin/master
git checkout -b dev-gml origin/dev-gml

An dieser Stelle gibt es aus irgendeinem Grund ein Problem, nachdem git fetch Ich kann den Remote-Zweig dev-gml nicht sehen. Warum nicht? Wenn ich das Repository neu klone, ist es da, also existiert der entfernte Zweig mit Sicherheit:

$ mkdir ../gitest
$ cd ../gitest
$ git clone https://github.com/example/proj.git
Cloning into proj...
remote: Counting objects: 1155, done.
remote: Compressing objects: 100% (383/383), done.
remote: Total 1155 (delta 741), reused 1155 (delta 741)
Receiving objects: 100% (1155/1155), 477.22 KiB | 877 KiB/s, done.
Resolving deltas: 100% (741/741), done.
$ cd projdir
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev-gml
  remotes/origin/master

Ich habe versucht git update , git pull , git fetch --all , git pretty-please in allen möglichen Permutationen...

746voto

AndASM Punkte 9028

Das Problem zeigt sich bei der Überprüfung der remote.origin.fetch Einstellung
(Die Zeilen, die mit $ sind Bash-Eingabeaufforderungen mit den von mir eingegebenen Befehlen. Die anderen Zeilen sind die resultierende Ausgabe)

$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

Wie Sie sehen können, war in meinem Fall der Remote-Zweig so eingestellt, dass er speziell und ausschließlich den Master-Zweig abruft. Ich habe es wie unten beschrieben behoben, einschließlich des zweiten Befehls zur Überprüfung der Ergebnisse.

$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

Der Joker * bedeutet natürlich alles, was unter diesem Pfad liegt.

Leider sah ich dieser Kommentar nachdem ich die Antwort bereits durch Ausprobieren gefunden hatte.

264voto

stux Punkte 2078

Ich hatte dieses Problem heute bei einem Repo.

Es war nicht die +refs/heads/*:refs/remotes/origin/* Problem gemäß der oberen Lösung.

Symptom war einfach, dass git fetch origin o git fetch schien einfach nichts zu tun, obwohl es entfernte Zweige zu holen gab.

Nachdem ich viele Dinge ausprobiert hatte, entfernte ich die Originalfernbedienung und erstellte sie neu. Das scheint das Problem behoben zu haben. Ich weiß nicht, warum.

mit entfernen: git remote rm origin

und mit neu erstellen: git remote add origin <git uri>

117voto

philipvr Punkte 5062

Fernaktualisierung

Sie müssen Folgendes ausführen

git remote update

oder

git remote update <remote> 

Dann können Sie git branch -r um die entfernten Zweige aufzulisten.

Eine neue Filiale auschecken

Um einen (neuen) entfernten Zweig als lokalen Zweig zu verfolgen:

git checkout -b <local branch> <remote>/<remote branch>

oder (manchmal funktioniert es auch nicht ohne die zusätzliche remotes/ ):

git checkout -b <local branch> remotes/<remote>/<remote branch>

Hilfreiche Git-Cheatsheets

33voto

Lukas Lukac Punkte 6578

Ich hatte heute das gleiche Problem, als ich mein Repo von Grund auf neu einrichtete. Ich habe alles versucht, nichts hat funktioniert, außer den Ursprung zu entfernen und ihn wieder einzufügen.

git remote rm origin
git remote add origin git@github.com:web3coach/the-blockchain-bar-newsletter-edition.git

git fetch --all
// Ta daaa all branches fetched

10voto

Samet ÖZTOPRAK Punkte 2702

Schreiben Sie es vom Terminal aus

git fetch --prune.

Es funktioniert gut.

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