it-swarm.com.de

git fetch holt nicht alle Äste ab

Ich habe ein Repository geklont, woraufhin ein anderer einen neuen Zweig erstellt hat, an dem ich gerne arbeiten würde. Ich habe das Handbuch gelesen, und es scheint ziemlich einfach zu sein. Seltsamerweise funktioniert es nicht und alle Beiträge, die ich gefunden habe, legen nahe, dass ich das Richtige tue. Also unterwerfe ich mich dem Verprügeln, weil da muss etwas offensichtlich falsch damit ist:

Die richtige Aktion 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 diesem Punkt gibt es ein Problem. Aus irgendeinem Grund kann nach git fetch der entfernte Zweig dev-gml nicht angezeigt werden. Warum nicht? Wenn ich das Repository frisch klone, ist es da, also ist der entfernte Zweig sicherlich vorhanden:

$ 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 git update, git pull, git fetch --all, git pretty-please in allen möglichen Permutationen ausprobiert ...

113
Edward Newell

Das Problem kann beim Überprüfen der Einstellung remote.Origin.fetch festgestellt werden
(Die Zeilen, die mit $ beginnen, sind Bash-Anweisungen 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, wurde in meinem Fall die Fernbedienung so eingestellt, dass nur der Master-Zweig speziell abgerufen wird. 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 Platzhalter * bedeutet natürlich alles unter diesem Pfad.

Leider habe ich diesen Kommentar gesehen, nachdem ich mich durchgegraben hatte und die Antwort durch Versuch und Irrtum gefunden hatte.

225
AndASM

So verfolgen Sie einen (neuen) Remote-Zweig als lokalen Zweig:

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

oder (manchmal funktioniert es nicht ohne den zusätzlichen remotes/):

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

Edit: Sie müssen git remote update oder git remote update <remote> ausführen. Dann können Sie git branch -r ausführen, um die entfernten Zweige aufzulisten.

Hilfreiche Git Cheatsheets

40
philipvr

Ich hatte diese Ausgabe heute auf einem Repo. 

Es war nicht das +refs/heads/*:refs/remotes/Origin/*-Problem gemäß der Top-Lösung.

Symptom war einfach, dass git fetch Origin oder git fetch einfach nichts zu tun schien, obwohl entfernte Zweige abgerufen werden mussten.

Nachdem ich viele Dinge ausprobiert hatte, entfernte ich die Origin-Fernbedienung und erstellte sie neu. Das scheint es behoben zu haben. Ich weiß nicht warum.

entfernen mit: git remote rm Origin

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

27
stux

Um es genauer zu machen .__ Erstellen Sie einen Tracking-Zweig, dh Sie verfolgen jetzt einen Remote-Zweig.

git branch --track branch remote-branch
git branch --track exp remotes/Origin/experimental

Danach kannst du 

git branch   # to see the remote tracking branch "exp" created .

Dann um an diesem Zweig zu arbeiten 

git checkout branchname
git checkout exp

Nachdem Sie Änderungen an dem Zweig vorgenommen haben. Sie können git fetch und git merge mit Ihrem Remote-Tracking-Zweig zusammenführen, um Ihre Änderungen zusammenzuführen und Push an den Remote-Zweig wie unten beschrieben.

git fetch Origin
git merge Origin/experimental  
git Push Origin/experimental

Hoffe es hilft und gibt dir eine Idee, wie das funktioniert.

4
Swapna

schreib es vom Terminal aus 

git fetch --Prune.

es funktioniert gut.

2
Samet öztoprak

Dies könnte auf einen Face-Palm-Moment zurückzuführen sein: Wenn Sie zwischen mehreren Klonen wechseln, können Sie leicht in den falschen Quellbaum wechseln und versuchen, einen nicht vorhandenen Zweig zu ziehen. Es ist einfacher, wenn die Klone ähnliche Namen haben oder die Repos unterschiedliche Klone für dasselbe Projekt von mehreren Beitragszahlern sind. Ein neuer Git-Klon scheint dieses "Problem" offensichtlich zu lösen, wenn das eigentliche Problem darin besteht, den Fokus oder den Arbeitskontext oder beides zu verlieren. 

0
jerseyboy

Wir hatten das gleiche Problem und müssen es nutzen 

git fetch

git Push Origin branch_name

git branch -r

Hoffe, das hilft jemandem, der das gleiche Problem hat

0
chazefate

Ich musste in meine GitExtensions Remote Repositories gehen, da hier nichts zu funktionieren schien. Dort sah ich, dass 2 Filialen kein Remote-Repository konfiguriert hatten. Nach dem Einstellen sieht es wie folgt ausenter image description here

Der Zweig noExternal3 zeigt immer noch an, dass er kein Remote-Repository hat. Nicht sicher, welche Kombination von Bash-Befehlen das gefunden oder angepasst hätte.

0
Maslow