417 Stimmen

Keine Submodulzuordnung in .gitmodule für einen Pfad gefunden, der kein Submodul ist

Ich habe ein Projekt, das ein Submodul unter lib/three20

Meine .gitmodule Datei sieht wie folgt aus:

[submodule "lib/three20"]
    path = lib/three20
    url = git://github.com/facebook/three20.git

Ich habe dies in der Vergangenheit ohne Fehler geklont, ( git submodule init gefolgt von einer git submodule update ) und es funktioniert schon seit einer Weile.

Ich habe versucht, diese auf einen neuen Rechner zu klonen, und jetzt erhalte ich diesen Fehler bei git submodule init :

No submodule mapping found in .gitmodules for path 'Classes/Support/Three20'

Dieser Pfad ist nur ein leerer Ordner in Xcode, den ich verwende, um die Projekte aus dem anderen Verzeichnis unterzubringen. Er ist nicht Teil des .gitmodules Datei, also weiß ich nicht, woher der Pfad kommt.

Irgendwelche Ideen?

10voto

James Moore Punkte 389

Ich stieß gerade auf diesen Fehler, nachdem ich versucht hatte, "git submodule init" bei einem neuen Checkout meines Repos zu verwenden. Es stellte sich heraus, dass ich den Modul-Unterordner mit dem falschen Fall zunächst angegeben hatte. Da ich einen Mac mit einem Dateisystem habe, das Groß- und Kleinschreibung unterscheidet (hurr), schlug der Versuch fehl. Zum Beispiel:

git submodule add git@github.com:user/project.git MyApp/Resources/Project
Cloning into 'MyApp/Resources/Project'

gelingt, aber das Problem ist, dass der Pfad auf der Festplatte

Myapp/Resources/Project

Was ich nicht verstehe, ist, warum Git das Modul im falschen Ordner initiiert (und dabei die falsche Groß-/Kleinschreibung in meinem Befehl ignoriert), dann aber bei nachfolgenden Befehlen korrekt arbeitet (indem es fehlschlägt).

7voto

hit9 Punkte 761

Einfach git rm subdir ist in Ordnung. Dadurch wird das Unterverzeichnis als Index entfernt.

5voto

anomolos Punkte 311

Ich hatte gerade dieses Problem. Eine Zeit lang habe ich die Ratschläge zum Entfernen des Pfads, zum Entfernen des Pfads mit git, zum Entfernen von .gitmodules, zum Entfernen des Eintrags aus .git/config, zum Wiederhinzufügen des Submoduls und zum anschließenden Übertragen und Pushen der Änderung ausprobiert. Es war rätselhaft, weil es nach "git commit -a" wie keine Änderung aussah, also habe ich versucht, nur die Entfernung zu übertragen und dann die Neuaufnahme zu übertragen, damit es wie eine Änderung aussieht.

Nach einer Weile bemerkte ich zufällig, dass nach dem Entfernen von allem, wenn ich "git submodule update --init" ausführte, eine Meldung über einen bestimmten Namen erschien, auf den Git keinen Bezug mehr haben sollte: den Namen des Repositorys, auf das das Submodul verlinkte, nicht den Pfadnamen, unter dem es ausgecheckt wurde. Das Greifen ergab, dass dieser Verweis in .git/index lag. Also habe ich "git rm --cached repo-name" ausgeführt und dann das Modul eingelesen. Als ich dieses Mal den Commit ausführte, enthielt die Commit-Meldung eine Änderung, dass dieses unerwartete Objekt gelöscht wurde. Danach funktioniert es einwandfrei.

Ich bin mir nicht sicher, was passiert ist. Ich vermute, dass jemand den Befehl git submodule falsch verwendet hat, vielleicht durch Vertauschen der Argumente. Könnte auch ich gewesen sein... Hoffentlich hilft das jemandem!

5voto

kenorb Punkte 134883

Die Ordnerzuordnung ist zu finden unter .git/modules Ordner (jeder hat config Datei mit Verweis auf ihre worktree ), stellen Sie also sicher, dass diese Ordner mit der Konfiguration in .gitmodules y .git/config .

Also .gitmodules hat den richtigen Pfad:

[submodule "<path>"]
  path = <path>
  url = git@github.com:foo/bar.git

und in .git/modules/<path>/config en [core] Abschnitt haben Sie den richtigen Weg zu Ihrem <path> z.B.

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  worktree = ../../../<path>

Wenn der richtige Ordner in .git/modules fehlt, dann müssen Sie zu Ihrem Submodulverzeichnis gehen und versuchen git reset HEAD --hard o git checkout master -f . Wenn dies nicht hilft, sollten Sie wahrscheinlich alle Verweise auf das defekte Submodul entfernen und es erneut hinzufügen, dann sehen Sie weiter: Umbenennen eines Git-Submoduls .

3voto

ken Punkte 12177

Szenario: Wechsel des Submoduls vom Verzeichnis dirA-xxx in ein anderes Verzeichnis dirB-xxx

  1. Verschieben Sie das DirA-xxx nach DirB-xxx
  2. Eintrag in .gitmodules ändern, um dirB-xxx zu verwenden
  3. Eintrag in .git/config ändern, um dirB-xxx zu verwenden
  4. .git/modules/dirA-xxx/config so ändern, dass das richtige Verzeichnis angezeigt wird
  5. dirA-xxx/.git so ändern, dass das richtige Verzeichnis angezeigt wird
  6. laufen. git submodule status

    wenn Rückgabefehler: Keine Submodul-Zuordnung in .gitmodules für Pfad dirA-xxx gefunden. Das liegt daran, dass dirA-xxx nicht existiert, aber trotzdem von Git verfolgt wird. Aktualisieren Sie den Git-Index um: git rm --cached dirA-xxx

    Versuchen Sie es mit git submodule foreach git pull . Ich habe nicht durch die tatsächliche Studie der Git-Submodul-Struktur gehen, so oben Schritte etwas brechen kann. Nichtsdestotrotz, wenn man die obigen Schritte durchgeht, sieht es im Moment gut aus. Wenn Sie einen Einblick oder richtige Schritte haben, um die Sache zu erledigen, teilen Sie es hier :)

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