Ich habe ein Projekt, das ein Submodul bei hat lib/three20
Meine .gitmodule
Datei sieht folgendermaßen aus:
[submodule "lib/three20"]
path = lib/three20
url = git://github.com/facebook/three20.git
Ich habe dies in der Vergangenheit fehlerfrei geklont ( git submodule init
gefolgt von a git submodule update
) und es funktioniert schon eine Weile.
Ich habe versucht, dies auf einen neuen Computer zu klonen, und jetzt erhalte ich den folgenden Fehler git submodule init
:
No submodule mapping found in .gitmodules for path 'Classes/Support/Three20'
Dieser Pfad ist nur ein leerer Ordner in Xcode, in dem ich die Projekte aus dem anderen Verzeichnis unterbringe. Es ist nicht Teil der .gitmodules
Datei, daher sehe ich nicht, woher dieser Pfad stammt.
Irgendwelche Ideen?
git
git-submodules
Ben Scheirman
quelle
quelle
.git
Ordner erwähnen . Ein zu tungrep -r "Classes/Support/Three20" *.*
bringt auch keine Ergebnissegit ls-tree HEAD Classes/Support
, und wenn dort steht, dass Three20 ein Commit ist, gibt es dort einen Gitlink. Wenn dies der Fall ist, befolgen Sie die entsprechenden Anweisungen aus der oben verlinkten Frage VonC, um sie entweder in ein geeignetes Submodul oder in regelmäßig nachverfolgten Inhalt umzuwandeln.Antworten:
Nach rajibchowdhury ‚s Antwort (upvoted), Verwendung
git rm
der Befehl wird empfohlen, ist für das Entfernen von speziellen Eintrag im Index ein Submodul angibt (a‚Ordner‘mit einem speziellen Modus160000
).Wenn der spezielle Eingabepfad nicht in der verwiesen wird
.gitmodule
(wie ‚Classes/Support/Three20
‘ in der ursprünglichen Frage), dann müssen Sie es entfernen, um das zu vermeiden " Keine Submodul Zuordnung gefunden.gitmodules
für Pfadfehlermeldung".Sie können alle Einträge im Index überprüfen, die auf Submodule verweisen:
Vorherige Antwort (November 2010)
Es ist möglich, dass Sie Ihr ursprüngliches Submodul nicht korrekt deklariert haben (dh ohne Ende '/' am Ende, wie in meiner alten Antwort beschrieben , obwohl Ihr
.gitmodule
Pfad in Ordnung ist).Dieser Thread erwähnt:
Löschen Sie natürlich nicht Ihre Hauptdatei
.gitmodules
, sondern kümmern Sie sich um andere zusätzliche.gitmodules
Dateien in Ihrem Arbeitsbaum.Jefromi erwähnt immer noch im Thema "falsche Submodulinitialisierung" Submodule, die tatsächlich Gitlinks sind.
Siehe So verfolgen Sie nicht verfolgte Inhalte um ein solches Verzeichnis in ein echtes Submodul umzuwandeln.
quelle
git rm xxx
(ohne nachgestellten Schrägstrich)git rm --cached
auf der Festplatte behalten, während Sie ihn aus dem Index entfernen..gitmodule
Verweis auf diese Einträge haben, dann stackoverflow.com/a/16162000/6309 . Wenn nicht, ein einfachergit rm afolder
(kein Nachlauf / Schrägstrich)In .gitmodules wurde keine Submodulzuordnung für den Pfad 'OtherLibrary / MKStore' gefunden, wenn
Ich wusste nicht, warum der Fehler auftritt. Nach einer Minute und fand die Antwort im Stackoverflow.
und aktualisieren Sie das Submodul erneut. Es funktioniert gut.
http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules
quelle
git submodule sync | grep "mapping found"
danngit rm
wiedergit submodule sync
. Problem weg!Wenn ich SourceTree benutze, um das Zeug zu machen, wird es diese Nachricht ausspucken.
Die Nachricht, auf die ich gestoßen bin:
Mein Szenario ist, dass ich das Projektverzeichnis, das den Ordner .git enthält, falsch angewendet habe .
SourceTree betrachtete diesen Ordner als Git-Submodul, aber eigentlich nicht.
Meine Lösung ist die Verwendung der Befehlszeile, um es zu entfernen.
Entferne den Müll in Git und halte ihn sauber.
quelle
Ich habe dieses Problem für mich gelöst. Anfangs habe ich versucht, dies zu tun:
Wie sich herausstellt, sollte die Spezifikation der Option --branch nicht verwendet werden, wenn Sie den Hauptzweig klonen möchten . Es wirft diesen Fehler aus:
Jedes Mal, wenn Sie versuchen, eine
Dieser Fehler wird ausgelöst:
Und die in .gitmodules benötigten Zeilen werden niemals hinzugefügt.
Die Lösung für mich war also:
quelle
Ich habe gerade diesen Fehler festgestellt, nachdem ich versucht habe, "submodule init" an einer neuen Kasse meines Repos zu "git". Es stellte sich heraus, dass ich den Modul-Unterordner anfangs mit dem falschen Fall angegeben hatte. Da ich auf einem Mac mit einem Dateisystem mit Groß- und Kleinschreibung (Hurr) bin, ist dies fehlgeschlagen. Zum Beispiel:
erfolgreich, aber das Problem ist, dass auf der Festplatte der Pfad ist
Was ich nicht verstehe, ist, warum git das Modul in einen falschen Ordner initiiert (wobei der falsche Fall in meinem Befehl ignoriert wird), aber dann mit nachfolgenden Befehlen korrekt funktioniert (indem es fehlschlägt).
quelle
Nur
git rm subdir
wird in Ordnung sein. Dadurch wird das Unterverzeichnis als Index entfernt.quelle
Hatte gerade dieses Problem. Für eine Weile habe ich versucht, den Pfad zu entfernen, den Pfad zu entfernen, Git-Module zu entfernen, den Eintrag aus Git / Config zu entfernen, das Submodul wieder hinzuzufügen, dann die Änderung festzuschreiben und zu verschieben. Es war rätselhaft, weil es nach keiner Änderung aussah, als ich "git commit -a" machte, also habe ich versucht, nur das Entfernen und dann die Neuausgabe zu drücken, damit es wie eine Änderung aussieht.
Nach einer Weile bemerkte ich zufällig, dass nach dem Entfernen von "git submodule update --init" eine Meldung über einen bestimmten Namen angezeigt wurde, auf den git keinen Verweis mehr haben sollte: den Namen des Repositorys des Submoduls wurde verlinkt, nicht der Pfadname, auf den es ausgecheckt hat. Grepping ergab, dass sich diese Referenz in .git / index befand. Also habe ich "git rm --cached repo-name" ausgeführt und dann das Modul erneut gelesen. Als ich dieses Mal festschrieb, enthielt die Festschreibungsnachricht eine Änderung, dass dieses unerwartete Objekt gelöscht wurde. Danach funktioniert es gut.
Ich bin mir nicht sicher, was passiert ist. Ich vermute, jemand hat den Befehl git submodule missbraucht und möglicherweise die Argumente umgekehrt. Könnte ich sogar gewesen sein ... Hoffe das hilft jemandem!
quelle
In der Datei .gitmodules habe ich den String ersetzt
mit
und es gelöst! - -
quelle
Die Ordnerzuordnung befindet sich im
.git/modules
Ordner (jeder hat eineconfig
Datei mit Bezug auf seineworktree
). Stellen Sie daher sicher, dass diese Ordner der Konfiguration in.gitmodules
und entsprechen.git/config
.Hat
.gitmodules
also den richtigen Weg:und in
.git/modules/<path>/config
in[core]
Abschnitt haben Sie den richtigen Pfad zu Ihrem<path>
, zBWenn der richtige Ordner
.git/modules
fehlt, müssen Sie zu Ihrem Submodul-Verzeichnis gehen und versuchen,git reset HEAD --hard
odergit checkout master -f
. Wenn dies nicht hilft, möchten Sie wahrscheinlich alle Verweise auf das defekte Submodul entfernen und erneut hinzufügen. Weitere Informationen finden Sie unter: Umbenennen eines Git-Submoduls .quelle
Szenario: Ändern des Submoduls vom Verzeichnis dirA-xxx in ein anderes Verzeichnis dirB-xxx
Lauf
git submodule status
Wenn Rückgabefehler: In .gitmodules für den Pfad dirA-xxx wurde keine Submodulzuordnung gefunden. Dies liegt daran, dass dirA-xxx nicht vorhanden ist, aber dennoch von git verfolgt wird. Aktualisieren Sie den Git-Index durch:
git rm --cached dirA-xxx
Versuchen Sie es mit
git submodule foreach git pull
. Ich habe die eigentliche Untersuchung der Struktur des Git-Submoduls nicht durchlaufen, daher können die obigen Schritte etwas beschädigen. Trotzdem sieht es im Moment gut aus. Wenn Sie einen Einblick oder geeignete Schritte haben, um etwas zu erledigen, teilen Sie ihn hier mit. :) :)quelle
Normalerweise erstellt git ein verstecktes Verzeichnis im Stammverzeichnis des Projekts (.git /).
Wenn Sie an einem CMS arbeiten, können Sie möglicherweise Module / Plugins installieren, die das Verzeichnis .git / mit den Metadaten von git für das jeweilige Modul / Plugin enthalten
Die schnellste Lösung besteht darin, alle .git-Verzeichnisse zu finden und nur Ihr Root-Git-Metadatenverzeichnis zu behalten. Wenn Sie dies tun, betrachtet git diese Module nicht als Projekt-Submodule.
quelle
Nachdem ich mir meine angesehen hatte
.gitmodules
, stellte sich heraus, dass ich einen Großbuchstaben hatte, den ich nicht haben sollte. Beachten Sie also, dass bei den.gitmodules
Verzeichnissen zwischen Groß- und Kleinschreibung unterschieden wirdquelle
.gitmodules
stattdessen gemeint hast ?In meinem Fall war der Fehler wahrscheinlich auf eine falsche Zusammenführung von .gitmodules auf zwei Zweigen mit unterschiedlichen Submodulkonfigurationen zurückzuführen. Nachdem ich Vorschläge aus diesem Forum angenommen hatte, löste ich das Problem beim manuellen Bearbeiten der .gitmodules-Datei. Das Hinzufügen des fehlenden Submoduleintrags ist ziemlich einfach. Danach funktionierte der Befehl git submodule update --init --recursive ohne Probleme.
quelle
Das Problem für uns war, dass doppelte Submoduleinträge zu .gitmodules hinzugefügt wurden (wahrscheinlich aus einer Zusammenführung). Wir haben nach dem Pfad gesucht, über den sich git in .gitmodules beschwert hat, und die beiden identischen Abschnitte gefunden. Das Löschen eines der Abschnitte löste das Problem für uns.
Für das, was es wert ist, gab Git 1.7.1 den Fehler "Keine Submodulzuordnung", aber Git 2.13.0 schien sich nicht darum zu kümmern.
quelle