Ich versuche tatsächlich zu lernen, wie man Git benutzt, einschließlich der git submodule
Unterbefehle. Ich habe bereits einen Server eingerichtet, auf dem ich Git-Repositorys mithilfe von SSH hosten, pushen und ziehen kann. Ich habe auf diesem Server ein Haupt-Git-Repository "Travail" erstellt, in das ich alle meine Projekte als Submodule einfügen möchte.
In meinem Travail-Repository habe ich bereits ein Projekt von mir als Submodul hinzugefügt unter tools/libft
: Ich kann dieses Submodul entwickeln, schieben und ziehen.
Wenn ich jedoch versuche, ein anderes Submodul (mit dem Namen fdf von fdf.git auf meinem Server) hinzuzufügen, tritt das folgende Problem auf:
git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf
Ein Git-Verzeichnis für 'projets / fdf' wird lokal mit Remote (s) gefunden: origin ssh: //[email protected]: XXXXX / opt / git / fdf.git Wenn Sie dieses lokale Git wiederverwenden möchten Verzeichnis, anstatt erneut von ssh zu klonen: //XXX.XXX.XXX.XXX: XXXXX / opt / git / fdf.git Verwenden Sie die Option '--force'. Wenn das lokale Git-Verzeichnis nicht das richtige Repo ist oder Sie sich nicht sicher sind, was dies bedeutet, wählen Sie einen anderen Namen mit der Option '--name'.
Es gibt eigentlich kein Unterverzeichnis in projets/
Ich habe in einem anderen Thread gelesen, dass ich git submodule sync
die .gitmodules-Datei verwenden oder bearbeiten soll, in der sich die URL zum Ursprungs-Repository meines Submoduls geändert haben könnte.
Meine .gitmodules-Datei enthält jedoch nur die Informationen zu meinem ersten Submodul (tools / libft), nicht zu projets / fdf:
[submodule "tools/libft"]
path = tools/libft
url = ssh://[email protected]:XXXXX/opt/git/libft.git
Als französischer Student hätte ich etwas in meiner englischen Dokumentation übersehen können, aber ich habe gesucht und verstehe wirklich nicht, warum ich dieses Problem bekomme.
Ich würde mich freuen, wenn ich eine Lösung bekommen würde, aber auch nur eine Erklärung wäre hilfreich.
quelle
/Travail/.git/modules/projets/
und einfdf
Verzeichnis gefunden. Dies scheint nicht im Arbeitsbaum zu sein, sondern in älteren Commits. Könnte es das Problem erzeugen?Antworten:
Ich bin zu diesem SO-Beitrag gekommen und habe versucht, ein Submodul mit demselben Pfad wie ein Submodul hinzuzufügen, das ich kürzlich gelöscht habe.
Das hat letztendlich bei mir funktioniert ( dieser Artikel hat mir sehr geholfen ):
Wenn Sie noch nicht ausgeführt haben
git rm --cached path_to_submodule
(kein abschließender Schrägstrich)rm -rf path_to_submodule
, tun Sie das!Dann:
Löschen Sie die relevanten Zeilen aus der
.gitmodules
Datei. zB diese löschen:[submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule
Löschen Sie den entsprechenden Abschnitt aus .git / config. zB diese löschen:
[submodule "path_to_submodule"] url = https://github.com/path_to_submodule
rm -rf .git/modules/path_to_submodule
Dann können Sie endlich:
git submodule add https://github.com/path_to_submodule
quelle
git rm
undrm -rf
Schritte getan .).git/modules
und das hat funktioniert.Ich habe die Lösung von jbmilgrom ausprobiert, speziell habe ich es versucht
git rm --cache
und das hat auch bei mir nicht funktioniert, da das Verzeichnis / Submodul nicht da war. Was für mich funktioniert hat war:rm -rf .git/modules/blah
git submodule add git://path.to.new
Ich tat dies, nachdem ich es
--force
innerhalb dergit submodule
Befehle undrm
aller anderen Verzeichnisse versucht hatte, Pushs an Master usw. Das Verzeichnis existierte nicht und es gab keinen Grund für den Cache. Es stellt sich heraus,.git/modules
dass dort dieser Fehler lag.quelle
Möglicherweise haben Sie Ihre
'projets/fdf'
von der Festplatte gelöscht , aber Ihr Git-Repository hat sie noch. Verwendengit rm -rf projets/fdf
Sie diese Option, um es von Git zu entfernen, und übernehmen Sie dann die Änderungen. Danach können Sie diesen Ordner als Submodul hinzufügen.quelle
/tmp/repo
und dann ausführengit submodule add ../otherrepo.git
, sehen Sie, dass dieser/tmp/repo/.git/modules/otherrepo
Ordner vorhanden ist. Das war das Problem für mich. Ich habe diesen Ordner manuell aus .git gelöscht und alles hat funktioniert.Wenn Sie das Submodulverzeichnis wie ich bereits gelöscht haben, befolgen Sie die restlichen Anweisungen von jbmilgrom. Der Schlüssel ist
rm -rf .git/modules/path_to_submodule
jedoch, dass Sie zuerst Ihr gesamtes übergeordnetes Repo-Verzeichnis sichern .Wenn Sie nur ein Submodul hatten, löschen Sie es einfach
.gitmodules
quelle
Diese beiden Befehle funktionieren bei mir.
quelle
.git/modules/
. Darin befindet sich ein Ordner, in dem das Repository für das Submodul gespeichert ist. Das Löschen dieses Repositorys hat das Problem für mich behoben, die akzeptierte Antwort jedoch nicht.