"Sie befinden sich in einem Zweig, der noch nicht geboren wurde", wenn Sie das Git-Submodul hinzufügen

116

Ich versuche, ein paar Submodule zu meinem .vim/bundlesVerzeichnis hinzuzufügen , und wenn ich versuche, dieses spezielle Repo hinzuzufügen, gibt mir Git einen seltsamen Fehler, den ich noch nie gesehen habe:

$ git submodule add -f git://github.com/derekwyatt/vim-scala.git .vim/bundle/vim-scala
fatal: You are on a branch yet to be born
Unable to checkout submodule '.vim/bundle/vim-scala'

Irgendeine Idee, was das verursachen kann?

Wenn ich dasselbe Repo in ein Testverzeichnis klone (nicht über den Befehl submodule), funktioniert es einwandfrei und erstellt die erwarteten Dateien.

matt b
quelle

Antworten:

210

Um diesen Fehler zu beheben, sollten Sie den Ordner mit demselben Pfad zum Submodul im .git/modules/Verzeichnis löschen . Dieser Fehler kann auftreten, wenn die URL für das Submodul zum ersten Mal falsch war, als das Submodul hinzugefügt wurde.

lisachenko
quelle
2
Danke, das hat den Trick gemacht. War anfangs etwas nicht offensichtlich, dass seit ich auf .vim/bundle/vim-scaladen zu löschenden Pfad geklont habe.git/modules/.vim/bundle/vim-scala
matt b
2
Wenn Sie unter Windows arbeiten, beachten Sie, dass das Verzeichnis unter .git / modules möglicherweise nur angezeigt wird, wenn Siedir /AH
paxos1977
13
Nachdem ich sehe, dass dieses .git/modules/path/to/submoduleVerzeichnis gelöscht wurde und versucht wird, das Submodul erneut hinzuzufügen, wird die Fehlermeldung angezeigt. Der folgende Pfad wird von einer Ihrer Gitignore-Dateien ignoriert: Pfad / zu / Submodul .
Drew Noakes
1
@Drew Noakes entfernen .vim / bundle / vim-scala erstellt nach dem ersten Durchlauf des Git-Submoduls hinzufügen
Piotr Król
Unter Windows können Sie auch die Windows Explorer-Optionen verwenden (an derselben Stelle, an der Sie Dateierweiterungen anzeigen möchten), um die ausgeblendeten Ordner in der GUI anzuzeigen und zu löschen.
user83358
13

Sie müssen ein Submodul in ein vorhandenes Repo einfügen, dieses Repo muss sich in einem Zustand befinden, in dem der Submodul-Link hinzugefügt und festgeschrieben werden kann , und das Submodul-Repo selbst muss ein Commit zum Auschecken haben.

Jetzt muss das Submodul-Repo selbst in Ordnung sein, wenn Sie an anderer Stelle einen regulären Klon erstellen können. Es sieht jedoch so aus, als würde man sich submodule addbeschweren, wenn das Repo leer ist, während der Klon dies nicht tut. Dieser Typ schlägt vor, dass dies behoben werden kann, indem derselbe submodule addBefehl erneut ausgeführt wird.

Wenn das innere Repo nicht leer ist, überprüfen Sie das Repo, das das Submodul enthalten soll . Wechseln Sie in dasselbe Verzeichnis, in dem Sie git submodule addausgeführt haben git status, und stellen Sie git branchsicher, dass in Ihrem enthaltenen Repo mindestens ein Zweig erstellt wurde und sich nicht in einem seltsamen Zustand befindet.

Nutzlos
quelle
Ich habe all diese Dinge überprüft. Wenn ich das gewünschte Repo in ein anderes Verzeichnis auschecke, enthält es viele Dateien und einen masterZweig. Das Repo, dem ich dieses als Submodul hinzufügen möchte, befindet sich in der masterVerzweigung, hat keine offensichtlichen Probleme (der Status gibt einige geänderte Dateien zurück, aber das ist alles), und das Seltsamste ist, dass ich diesem Repository problemlos andere Submodule hinzufügen kann .
Matt B
Ebenfalls seltsam: Nach der fatalWarnung von meinem OP hinterlässt git ein leeres Verzeichnis bei .vim/bundle/vim-scala. Ich habe auch festgestellt, dass, obwohl .gitmoduleses unberührt ist, einige Zeilen hinzugefügt wurden, die auf dieses Repo von github.com verweisen .git/config, aber nach dem Entfernen dieser Zeilen wird immer noch dieselbe fatalFehlermeldung angezeigt.
Matt B
7
+1 Argh! This guy suggests this is fixable by just running the same submodule add command again.. Ich habe dieses Problem bekämpft und versucht, eine vernünftige Antwort zu finden, und dies hat es schließlich behoben. Dies war für Git 1.8.0 unter MSYS beim Erstellen eines Submoduls aus BitBucket. Wenn Sie sich also in derselben Situation befinden, versuchen Sie dies zuerst.
Aaron Newton
Das zweimalige Hinzufügen hat auch bei mir funktioniert. Aber ich verstehe nicht warum. Irgendeine Erklärung?
Elise
Auch hier zweimal hinzufügen. Ich würde gerne verstehen, warum
Vinicius Dantas
12

Dieser Fehler kann auftreten, wenn Sie ein Submodul hinzufügen, das keinen masterZweig hat. Wenn Sie beim Hinzufügen des Submoduls ( developz. B.) einen anderen Zweig verwenden möchten , können Sie den folgenden Befehl verwenden:

git submodule add -b <branch> <repository>
k4nar
quelle
1
In meinem Fall wurde Repo neu erstellt und hatte daher keine Dateien und Zweige (war leer), also git submodule add -b master <repo.git> <folder>half
vladkras
Dies war mein Problem, mein Submodul hatte nur 2 Zweige. Keiner von ihnen ist eine masterIhrer Lösungen, die für mich funktioniert haben.
Guerneen4
0

Wie von @ draw-noakes angedeutet, kann dies durch den Versuch verursacht werden, ein Submodul unter Verwendung eines Verzeichnisnamens hinzuzufügen, der in Ihrer .gitignore- Datei aufgeführt ist.

John McFarlane
quelle