4669 Stimmen

Wie kann ich ein Submodul entfernen?

Wie kann ich ein Git-Submodul entfernen?

Übrigens, gibt es einen Grund, warum ich nicht einfach git submodule rm whatever ?

4854voto

John Douthat Punkte 39886

Im modernen Git (ich schreibe dies im Jahr 2022, mit einer aktualisierten git Installation), ist dies nun viel einfacher geworden:

  • ausführen. git rm <path-to-submodule> und verpflichten sich .

Dies entfernt den Dateibaum bei <path-to-submodule> und der Eintrag des Submoduls in der Datei .gitmodules Datei. D.h. werden alle Spuren des Submoduls in Ihrem eigentlichen Repository entfernt.

Als der Arztbrief jedoch die .git dir des Submoduls wird beibehalten (in der modules/ Verzeichnis des Hauptprojekts .git dir), " um das Auschecken vergangener Übertragungen zu ermöglichen, ohne dass diese aus einem anderen Repository geholt werden müssen ".
Wenn Sie diese Informationen dennoch entfernen möchten, löschen Sie das Verzeichnis des Submoduls manuell in .git/modules/ und entfernen Sie den Eintrag des Submoduls in der Datei .git/config . Diese Schritte können mit den folgenden Befehlen automatisiert werden

  • rm -rf .git/modules/<path-to-submodule> und
  • git config --remove-section submodule.<path-to-submodule> .

Ältere Community-Wiki-Anleitungen:

Über die Seite Git-Submodul-Anleitung :

Um ein Submodul zu entfernen, müssen Sie Folgendes tun:

  1. Löschen Sie den entsprechenden Abschnitt aus der .gitmodules Datei.
  2. Inszenieren Sie die .gitmodules Änderungen:
    git add .gitmodules
  3. Löschen Sie den entsprechenden Abschnitt aus .git/config .
  4. Entfernen Sie die Submoduldateien aus dem Arbeitsbaum und dem Index:
    git rm --cached path_to_submodule (ohne abschließenden Schrägstrich).
  5. Entfernen Sie das Submodul .git Verzeichnis:
    rm -rf .git/modules/path_to_submodule
  6. Bestätigen Sie die Änderungen:
    git commit -m "Removed submodule <name>"
  7. Löschen Sie die nun nicht mehr verfolgten Submoduldateien:
    rm -rf path_to_submodule

Siehe auch : alternative Schritte unten .

949voto

fvgs Punkte 19384

Die meisten Antworten auf diese Frage sind veraltet, unvollständig oder unnötig komplex.

Ein Submodul, das mit git 1.7.8 oder neuer geklont wurde, hinterlässt höchstens vier Spuren von sich in Ihrem lokalen Projektarchiv. Der Prozess zum Entfernen dieser vier Spuren wird durch die drei folgenden Befehle beschrieben:

# Remove the submodule entry from .git/config
git submodule deinit -f path/to/submodule

# Remove the submodule directory from the superproject's .git/modules directory
rm -rf .git/modules/path/to/submodule

# Remove the entry in .gitmodules and remove the submodule directory located at path/to/submodule
git rm -f path/to/submodule

241voto

errordeveloper Punkte 6322

Einfache Schritte

  1. Entfernen Sie Konfigurationseinträge:
    git config -f .git/config --remove-section submodule.$submodulename
    git config -f .gitmodules --remove-section submodule.$submodulename
  2. Verzeichnis aus dem Index entfernen:
    git rm --cached $submodulepath
  3. Commit
  4. Löschen Sie nicht verwendete Dateien:
    rm -rf $submodulepath
    rm -rf .git/modules/$submodulename

Bitte beachten: $submodulepath keine führenden oder abschließenden Schrägstriche enthält.

Hintergrund

Wenn Sie das tun git submodule add fügt er sie nur zu .gitmodules aber sobald du es getan hast git submodule init fügte sie hinzu .git/config .

Wenn Sie also die Module entfernen möchten, aber in der Lage sein wollen, sie schnell wiederherzustellen, dann tun Sie genau dies:

git rm --cached $submodulepath
git config -f .git/config --remove-section submodule.$submodulepath

Es ist eine gute Idee, Folgendes zu tun git rebase HEAD erste und git commit am Ende, wenn Sie dies in ein Skript einfügen.

Sehen Sie sich auch an eine Antwort auf Kann ich ein Git-Submodul entpacken? .

87voto

Mark Cheverton Punkte 1182

Zusätzlich zu den Empfehlungen musste ich auch rm -Rf .git/modules/path/to/submodule um ein neues Submodul mit demselben Namen hinzufügen zu können (in meinem Fall habe ich einen Fork durch das Original ersetzt)

74voto

Carmine Paolino Punkte 2631

Sie müssen den Eintrag in .gitmodules y .git/config und entfernen Sie das Verzeichnis des Moduls aus der Historie:

git rm --cached path/to/submodule

Wenn Sie auf der Mailingliste von Git schreiben, wird wahrscheinlich jemand ein Shell-Skript für Sie erstellen.

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