Problem beim Hinzufügen von allgemeinem Code als Git-Submodul: „bereits im Index vorhanden“

Lesezeit: 8 Minuten

Problem beim Hinzufugen von allgemeinem Code als Git Submodul „bereits im
Vanja

Ich bin neu bei Git und würde mich über Hilfe beim Hinzufügen von Submodulen freuen. Ich habe zwei Projekte erhalten, die einen gemeinsamen Code teilen. Der gemeinsame Code wurde einfach in die beiden Projekte kopiert. Ich habe ein separates Git-Repo für den gemeinsamen Code erstellt und es aus den Projekten entfernt, mit dem Plan, es als git Submodul.

Ich habe die Pfadoption von git submodule add verwendet, um den Ordner anzugeben:

git submodule add url_to_repo projectfolder

aber dann kam der fehler:

'projectfolder' already exists in the index"

Dies ist die gewünschte Struktur meines Repositorys:

repo
|-- projectfolder
    |-- folder with common code

Es ist möglich, die hinzuzufügen git Submodul direkt im Repo, oder dort in einen neuen Ordner, aber nicht in den Projektordner. Das Problem ist, dass es wirklich im Projektordner sein muss. Was kann ich dagegen tun und was habe ich an der Pfadoption von git submodule add falsch verstanden?

  • Was bekommst du, wenn du es tust git ls-files --stage projectfolder?

    – Mark Longair

    15. Oktober 2012 um 15:14 Uhr

  • Ich erhalte eine Liste mit allen Inhalten beginnend mit 100644.

    – Wanja

    16. Oktober 2012 um 5:55 Uhr

  • verwandt: stackoverflow.com/questions/12696919/…

    – Julio Marins

    20. Mai 2016 um 18:09 Uhr

  • für mich tun a git rm auf den vorhandenen Ordner geholfen 😐

    – Rogerpack

    20. September 2016 um 19:54 Uhr

Ich fürchte, Ihre Frage enthält nicht genügend Informationen, um sicher zu sein, was los ist, da Sie auf meine Folgefrage nicht geantwortet haben, aber dies kann auf jeden Fall hilfreich sein.

Das bedeutet dieser Fehler projectfolder bereits bereitgestellt ist (“bereits im Index vorhanden”). Um herauszufinden, was hier vor sich geht, versuchen Sie, alles im Index unter diesem Ordner aufzulisten mit:

git ls-files --stage projectfolder

Die erste Spalte dieser Ausgabe gibt an, um welchen Objekttyp es sich im Index handelt projectfolder. (Diese sehen aus wie Unix-Dateimodi, haben aber in Git eine besondere Bedeutung.)

Ich vermute, dass Sie etwas sehen werden wie:

160000 d00cf29f23627fc54eb992dde6a79112677cd86c 0   projectfolder

(d. h. eine Zeile, die mit beginnt 160000), in diesem Fall das Repository in projectfolder wurde bereits als “gitlink” hinzugefügt. Wenn es nicht in der Ausgabe von erscheint git submoduleund Sie es erneut als Untermodul hinzufügen möchten, können Sie Folgendes tun:

git rm --cached projectfolder

… um es zu destagnieren, und dann:

git submodule add url_to_repo projectfolder

… um das Repository als Submodul hinzuzufügen.

Es ist jedoch auch möglich, dass viele Blobs aufgelistet werden (mit Dateimodi 100644 und 100755), was für mich darauf hindeuten würde, dass Sie die Dateien nicht ordnungsgemäß ausgelagert haben projectfolder bevor Sie das neue Repository an seinen Platz kopieren. Wenn dies der Fall ist, können Sie Folgendes tun, um alle diese Dateien aus der Staging-Umgebung zu entfernen:

git rm -r --cached projectfolder

… und dann das Submodul hinzufügen mit:

git submodule add url_to_repo projectfolder

  • Danke Markus für deine ausführliche Antwort. Ich habe ein “git rm -r –cached projectfolder” gemacht und versucht, das Submodul erneut anzusprechen. Diesmal bekomme ich jedoch die Fehlermeldung “‘Projektordner’ existiert bereits und ist kein gültiges Git-Repo”.

    – Wanja

    16. Oktober 2012 um 5:58 Uhr

  • @Vanja: Das deutet darauf hin projectfolder enthielt kein .git Verzeichnis. Aus Ihrer Frage klang es so, als hätten Sie das neue Repository für erstellt projectfolder an anderer Stelle und kopierte es an Ort und Stelle, aber das war eindeutig nicht der Fall. Sie müssten die vorhandenen verschieben projectfolder aus dem Weg und kopieren Sie dann das neue Repository (komplett mit seiner .git Verzeichnis) vor dem Hinzufügen als Submodul. Oder, wenn Sie es bereits in das Repository verschoben haben, das durch repräsentiert wird url_to_repodu könntest dich einfach bewegen projectfolder aus dem Weg und fügen Sie dann das Submodul von dieser URL hinzu.

    – Mark Longair

    16. Oktober 2012 um 11:42 Uhr

  • Das hat mir sehr geholfen. Danke!

    – Evan Moran

    7. März 2014 um 23:31 Uhr

  • Dies ist, was ich getan habe, das ist ein 3-Schritt-Prozess. SCHRITT 1: git rm -r –cached src/test/resources/ , SCHRITT 2: vorhandenes Ressourcenverzeichnis an einen anderen Ort entfernt, SCHRITT 3: git submodule add add url_to_repo src/ Test/Ressourcen

    – vikramvi

    30. Januar 2017 um 11:41 Uhr


  • Danke, das hat mir geholfen, als ich versucht hatte, in Eile ein weiteres Repo hinzuzufügen, und es falsch gemacht hatte (Git-Klon in einem Repo, statt Git-Submodul hinzufügen). Auf meinem anderen Rechner schien es ein Untermodul zu sein, aber es wurde nie eine .gitmodules-Datei erstellt. Die obigen Schritte bringen mich auf den Weg, um das Problem zu beheben. Herzlichen Dank!

    – Frottee

    8. August 2017 um 19:17 Uhr

1646174291 920 Problem beim Hinzufugen von allgemeinem Code als Git Submodul „bereits im
Neeraj Kumar

Sie müssen zuerst Ihr Submodul-Git-Repository (in diesem Fall den Projektordner) für den Git-Pfad entfernen.

rm -rf projectfolder

git rm -r projectfolder

und dann Submodul hinzufügen

git submodule add <git_submodule_repository> projectfolder

  • git submodule add --force <git_submodule_repository> hat für mich funktioniert, um den gleichen Submodulnamen beizubehalten

    – Tenfrow

    10. Oktober 2019 um 13:46 Uhr

  • Danke!! Ich musste nicht in den Projektordner hinzufügen, sondern nur in das Unterverzeichnis wechseln und von dort aus klonen.

    – Toni Fraser

    5. Mai 2020 um 17:33 Uhr

  • Du bist ein Genie!

    – Superpony

    gestern

Das manuelle Entfernen des Submoduls umfasst eine Reihe von Schritten, und dies hat bei mir funktioniert.

Angenommen, Sie befinden sich im Stammverzeichnis des Projekts und der Name des Beispiel-Git-Moduls lautet „c3-pro-ios-framework“.

Entfernen Sie die dem Submodul zugeordneten Dateien

rm -rf .git/modules/c3-pro-ios-framework/

Entfernen Sie alle Verweise auf das Submodul in der Konfiguration

vim .git/config

Geben Sie hier die Bildbeschreibung ein

Entfernen Sie .gitmodules

rm -rf .gitmodules

Entferne es ohne das “git” aus dem Cache

git rm --cached c3-pro-ios-framework

Submodul hinzufügen

git submodule add https://github.com/chb/c3-pro-ios-framework.git

  • Toller Beitrag, funktioniert super. Großartig, dass Sie es teilen, Sir. Wirklich toll.

    – gabn88

    21. Februar 2017 um 20:46 Uhr

  • Ich habe versucht, Untermodule über aufzulisten git submodule nach dem Entfernen und vor dem Hinzufügen und es gab mir einen Fehler, das Bestätigen des Entfernens hat sich darum gekümmert.

    – Mehmet

    7. September 2017 um 17:46 Uhr

  • Ich würde dies 50x positiv bewerten, wenn ich könnte; Du hast gerade meinen Tag gerettet!

    – Sensei James

    1. November 2018 um 7:02 Uhr

  • touch .gitmodules (muss im Arbeitsbaum sein, also hilft es, es zu entfernen. Aber Sie müssen es wieder hinzufügen). Toller Beitrag btw. Das einzige, was hier funktioniert hat.

    – Torx

    1. Oktober 2019 um 9:13 Uhr

  • Es war der .git Verzeichnis, das für mich noch Reste hatte. Das hat super funktioniert. Danke.

    – Kevin Anderson

    30. Januar 2020 um 13:28 Uhr

Problem beim Hinzufugen von allgemeinem Code als Git Submodul „bereits im
nicht definiert

Ich hatte das gleiche Problem und nach stundenlangem Suchen die Antwort gefunden.

Der Fehler, den ich bekam, war ein wenig anders: <path> already exists and is not a valid git repo (und hier für den SEO-Wert hinzugefügt)

Die Lösung besteht darin, das Verzeichnis NICHT zu erstellen, das das Submodul beherbergen wird. Das Verzeichnis wird als Teil der erstellt git submodule add Befehl.

Außerdem wird erwartet, dass das Argument relativ zum übergeordneten Repo-Stammverzeichnis ist, nicht zu Ihrem Arbeitsverzeichnis, also achten Sie darauf.

Lösung für das obige Beispiel:

  1. Es ist in Ordnung, wenn Ihr übergeordnetes Repo bereits geklont ist.
  2. Stellen Sie sicher, dass common_code Verzeichnis tut nicht existieren.
  3. cd Repo
  4. git submodule add git://url_to_repo projectfolder/common_code/ (Beachten Sie den erforderlichen abschließenden Schrägstrich.)
  5. Gesundheit wiederhergestellt.

Ich hoffe, das hilft jemandem, da an anderer Stelle nur sehr wenige Informationen darüber zu finden sind.

1646174293 771 Problem beim Hinzufugen von allgemeinem Code als Git Submodul „bereits im
gerechtfertigt

wenn es einen Ordner mit dem Namen gibt x Wenn Sie unter Git-Steuerung ein gleichnamiges Submodul hinzufügen möchten, sollten Sie dies tun lösche Ordner x und begehe es zuerst.

Aktualisiert von @ujjwal-singh:

Commitment ist nicht nötig, Inszenierung genügt.. git add / git rm -r

  • Was ich vermisst habe, war das Commitment. Kurze Antwort, aber richtig!

    – Qqwy

    5. April 2017 um 18:25 Uhr

  • Commitment ist nicht nötig, Inszenierung genügt.. git add / gir rm -r

    – Ujjwal Singh

    23. Mai 2017 um 15:26 Uhr


Nur um in menschlicher Sprache zu verdeutlichen, was der Fehler Ihnen zu sagen versucht:

Sie können in diesem Ordner kein Repository erstellen, das bereits im Haupt-Repository verfolgt wird.

Zum Beispiel: Sie haben einen Themenordner namens AwesomeTheme Das ist ein dediziertes Repository, Sie versuchen, es direkt in Ihr Haupt-Repository zu kopieren git submodule add sites/themes und du bekommst das "AwesomeTheme" index already exists.

Sie müssen nur sicherstellen, dass es nicht bereits eine gibt sites/themes/AwesomeTheme in der Versionsverfolgung des Haupt-Repositorys, damit das Submodul dort erstellt werden kann.

Um das Problem zu beheben, in Ihrem Haupt-Repository, wenn Sie ein leeres haben sites/theme/AwesomeTheme Verzeichnis und entferne es. Wenn Sie bereits Commits mit dem gemacht haben sites/theme/AwesomeTheme Verzeichnis in Ihrem Haupt-Repository müssen Sie den gesamten Verlauf davon mit einem Befehl wie dem folgenden löschen:

git filter-branch --index-filter \
              'git rm -r --cached --ignore-unmatch sites/theme/AwesomeTheme'     HEAD

Jetzt können Sie laufen git submodule add [email protected] sites/themes/AwesomeTheme

Da das Haupt-Repository noch nie etwas (auch bekannt als indexiert) gesehen hat sites/themes/AwesomeTheme zuvor kann es es jetzt erstellen.

  • Was ich vermisst habe, war das Commitment. Kurze Antwort, aber richtig!

    – Qqwy

    5. April 2017 um 18:25 Uhr

  • Commitment ist nicht nötig, Inszenierung genügt.. git add / gir rm -r

    – Ujjwal Singh

    23. Mai 2017 um 15:26 Uhr


Problem beim Hinzufugen von allgemeinem Code als Git Submodul „bereits im
Vanja

Ich habe es funktioniert, indem ich es andersherum gemacht habe. Beginnen Sie mit einem leeren Repo und fügen Sie das Submodul in einem neuen Ordner namens “projectfolder/common_code” hinzu. Danach war es möglich, den Projektcode im Projektordner hinzuzufügen. Die Details sind unten dargestellt.

Geben Sie in einem leeren Repo Folgendes ein:

git submodule add url_to_repo projectfolder/common_code

Dadurch wird die gewünschte Ordnerstruktur erstellt:

repo
|-- projectfolder
    |-- common_code

Es ist jetzt möglich, weitere Untermodule hinzuzufügen, und der Projektcode kann zum Projektordner hinzugefügt werden.

Warum es so geklappt hat und anders nicht, kann ich noch nicht sagen.

905590cookie-checkProblem beim Hinzufügen von allgemeinem Code als Git-Submodul: „bereits im Index vorhanden“

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy