Git-Submodul hinzufügen: Problem "Ein Git-Verzeichnis wird lokal gefunden"

189

Ich versuche tatsächlich zu lernen, wie man Git benutzt, einschließlich der git submoduleUnterbefehle. 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 syncdie .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.

vmonteco
quelle
Eine kleine Korrektur: Es ist "Repository", nicht "Depot". Keine wirkliche Antwort, aber wenn die Projekte unabhängig voneinander sind, ist es besser, wenn jedes Projekt ein eigenes Repo anstelle von Submodulen hat.
Jcm
Danke, habe ich korrigiert. Ich weiß, aber ich möchte alle meine Arbeiten im selben Repo sammeln, aber als separate Projekte. Es ist eine Wahl, meine gesamte Arbeit auf dem neuesten Stand zu halten, wenn ich von zu Hause in meine Schule gehe und umgekehrt (und um zu lernen, wie man diese Werkzeuge benutzt, bin ich neugierig;))
vmonteco
Neugier ist immer ein guter Grund! :) Das ist komisch. Sind Sie sicher, dass Sie das Submodul noch nicht hinzugefügt haben?
Jcm
Nicht in Travail /, und ich habe kein Problem, fdf.git in ~ / zu klonen. In Travail / finde ich keine Spuren von fdf. nur libft: /
vmonteco
5
Oh warte, ich habe reingeschaut /Travail/.git/modules/projets/und ein fdfVerzeichnis gefunden. Dies scheint nicht im Arbeitsbaum zu sein, sondern in älteren Commits. Könnte es das Problem erzeugen?
Vmonteco

Antworten:

435

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:

  1. Löschen Sie die relevanten Zeilen aus der .gitmodulesDatei. zB diese löschen:

    [submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule

  2. Löschen Sie den entsprechenden Abschnitt aus .git / config. zB diese löschen:

    [submodule "path_to_submodule"] url = https://github.com/path_to_submodule

  3. rm -rf .git/modules/path_to_submodule

Dann können Sie endlich:

git submodule add https://github.com/path_to_submodule

jbmilgrom
quelle
47
Dies war sehr hilfreich, da ich nichts anderes finden konnte, das funktionierte. Der Hauptunterschied zu anderen Vorschlägen war Ihr Schritt 3. Vielen Dank!
AndroidDev
8
Die Schritte 2 und 3 wurden für mich benötigt.
U007D
8
Schritt 3 wurde für mich benötigt, aber warum gibt es das Submodul auch dort?
Crt
1
Für mich habe ich die Schritte 1 und 2 übersprungen (die bereits die richtigen Einstellungen hatten) und Schritt 3 hat es für mich behoben. (Ich hatte bereits den ersten Schritt von git rmund rm -rfSchritte getan .)
Rock Lee
2
Selbst Schritt 3 hat bei mir nicht funktioniert. Ich hatte nur ein Submodul, also habe ich das gesamte gelöscht .git/modulesund das hat funktioniert.
Ach
47

Ich habe die Lösung von jbmilgrom ausprobiert, speziell habe ich es versucht git rm --cacheund das hat auch bei mir nicht funktioniert, da das Verzeichnis / Submodul nicht da war. Was für mich funktioniert hat war:

  1. rm -rf .git/modules/blah
  2. git submodule add git://path.to.new

Ich tat dies, nachdem ich es --forceinnerhalb der git submoduleBefehle und rmaller 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/modulesdass dort dieser Fehler lag.

pjammer
quelle
15

Möglicherweise haben Sie Ihre 'projets/fdf'von der Festplatte gelöscht , aber Ihr Git-Repository hat sie noch. Verwenden git rm -rf projets/fdfSie diese Option, um es von Git zu entfernen, und übernehmen Sie dann die Änderungen. Danach können Sie diesen Ordner als Submodul hinzufügen.

Bredikhin
quelle
Es hat funktioniert :) Danke. Ich glaube, ich habe diesen Fehler tatsächlich gemacht.
Vmonteco
21
Mir wird gesagt, dass das Verzeichnis nicht existiert, wenn ich das tue. Scheint, dass beides existiert und nicht: /
Nathan Hornby
40
@ tom-mcfarlin Am Ende wurden imanually Zeilen aus .gitmodule und ein Ordner aus .git / modules entfernt, und dann konnte ich ein neues Submodul hinzufügen. Vielleicht gibt es einen besseren Weg, dies zu tun, aber mir ging die Zeit davon. Wenn Sie diesen Weg gehen, empfehle ich Ihnen, ein gutes Backup zu erstellen, und bitte beschuldigen Sie mich nicht, wenn es für Sie schief geht. Viel Glück.
Sparklos
5
Vielen Dank, ich habe in einem anderen Beitrag gefunden, den Ordner aus .git / modules zu entfernen, und das hat bei mir funktioniert. Sinnvoll, da der Fehler der Konflikt war ... Ich wusste nur nichts von diesem Ordner
Tom McFarlin
10
@NathanHornby @Sparklos @TomMcFarlin - In neueren Versionen von git wird das git-Submodul ein Verzeichnis im Ordner .git hinzufügen. Wenn Sie sich beispielsweise im Verzeichnis befinden /tmp/repound dann ausführen git submodule add ../otherrepo.git, sehen Sie, dass dieser /tmp/repo/.git/modules/otherrepoOrdner vorhanden ist. Das war das Problem für mich. Ich habe diesen Ordner manuell aus .git gelöscht und alles hat funktioniert.
Alexander Bird
13

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_submodulejedoch, dass Sie zuerst Ihr gesamtes übergeordnetes Repo-Verzeichnis sichern .

Wenn Sie nur ein Submodul hatten, löschen Sie es einfach .gitmodules

Dmitri R117
quelle
2

Diese beiden Befehle funktionieren bei mir.

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf
W.Perrin
quelle
Dies. Es scheint zwei Möglichkeiten zu geben, Submodule zu erstellen. In einem von ihnen enthält der Unterordner nur eine einzige .git-Datei, die einfach auf ein Verzeichnis im Superprojekt verweist, beginnend mit .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.
William Randokun