Nach dem Klonen eines Remote-Repositorys wird keine Remote-Verzweigung mit der Option -a angezeigt. Was könnte das Problem sein? Wie kann ich es debuggen? In diesem Snippet werden zwei der entfernten Zweige nicht angezeigt:
$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
$ cd pythonwebkit
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
$ git --version
git version 1.8.3.1
Versuchte den gleichen Befehl auf einem anderen Computer, es funktioniert gut:
$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
Receiving objects: 100% (186886/186886), 818.91 MiB | 3.44 MiB/s, done.
$ cd pythonwebkit/
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/debian
remotes/origin/master
remotes/origin/python_codegen
$ git --version
git version 1.7.1
Versucht auch ein anderes Repo zu klonen, es funktioniert gut. Ich kann es zwar noch einmal auf dieser Maschine versuchen, aber es wäre besser zu wissen, was los ist.
Anregungen oder Hinweise sind herzlich willkommen.
Bearbeiten: Antwortzusammenfassung: Seit Git-Version 1.8.3.2 müssen "--depth" und "--no-single-branch" zusammen verwendet werden, um das gleiche Verhalten wie zuvor zu erzielen. Dies wird als Fehlerbehebung angesehen.
git
branch
shallow-clone
Minghua
quelle
quelle
master
ist Ihre lokale Niederlassung.remotes/origin/master
ist der entsprechende Remote-Zweig. Was genau ist die Frage?git branch -avv
git clone --depth=1 --no-single-branch
, das ist es, was ich in den meisten Fällen brauche.Antworten:
Das Verhalten ist korrekt. Nach der letzten Überarbeitung ist der Hauptzweig (da dies der HEAD der primären Fernbedienung ist) der einzige Fernzweig im Repository:
Der vollständige Klon bietet neue (alle) Zweige:
Flache Klone
Aufgrund der flachen Beschreibung in der technischen Dokumentation führt ein
git-clone --depth 20 repo
[...] Ergebnis zu Festschreibungsketten mit einer Länge von höchstens 20. Ein flacher Klon sollte daher die angeforderte Tiefe der Commits von der Spitze eines Zweigs enthalten.Wie - zusätzlich - beschreibt die Dokumentation
git clone
für die--single-branch
Option:Daher ist ein flacher Klon ( mit der Tiefe -option) nur holt nur einen einzigen Zweig (in Ihrer gewünschten Tiefe).
Leider waren beide Optionen (
--depth
und--single-branch
) in der Vergangenheit fehlerhaft und die Verwendung von flachen Klonen führt zu ungelösten Problemen (wie Sie in dem oben veröffentlichten Link lesen können), die durch das gegebene Umschreiben des Verlaufs verursacht werden. Dies führt in besonderen Fällen insgesamt zu einem etwas komplizierten Verhalten.quelle
fetch = +refs/heads/*:refs/remotes/origin/*
undgit fetch --depth 1
ohne (ohne--tags
). Wir können auch bestimmte Tags hinzufügen, die mit config like abgerufen werden sollenfetch = +refs/tags/v2.0.0:refs/tags/v2.0.0
.Nachdem Sie einen flachen Klon erstellt haben, um andere Zweige von einem entfernten Standort aus überprüfen zu können ,
Run (danke @jthill):
Danach machen Sie eine
git fetch -v
Schließlich
git checkout the-branch-i-ve-been-looking-for
Schritt 1 kann auch manuell durch Bearbeiten ausgeführt werden
.git/config
.Ändern Sie beispielsweise die folgende Zeile von:
zu (ersetzen
master
durch*
):quelle
git remote set-branches origin '*'
für alle Zweige verwenden, ersetzen Sie den*
durch einen Zweignamen für einen.-vvv
bedeutet ingit fetch -vvv
? Ich kann keine Informationen darüber in git-fetch doc findenverbosity
oderdebug
Protokollierungsstufe vongit
. Es ist nicht von derfetch
Methode.Nach dem Lesen der Antworten und des Kommentars von @jthill war es für mich
set-branches
am besten, die Option für dengit remote
Befehl zu verwenden:Dadurch wird die Liste der von der genannten Fernbedienung verfolgten Zweige geändert, sodass nur der erforderliche Zweig abgerufen und ausgecheckt werden kann.
quelle
git remote set-branches --add origin 'remote_branch_name'
, den neuen Zweig zusätzlich zu den vorhandenen zu verwenden, als ihn in der Liste der Zweige (oder Verzweigungsmuster) der Fernbedienung zu ersetzen, die in der .git / config-Datei abgerufen werden sollen.'
ist wichtig ingit remote set-branches --add origin 'remote_branch_name'