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: //git@XXX.XXX.XXX.XXX: 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://git@XXX.XXX.XXX.XXX: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.


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


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.


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.


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


2

Diese beiden Befehle funktionieren bei mir.

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.