Wie Entferne ich ein Submodul?
Wie Entferne ich ein Git-submodule?
By the way, gibt es einen Grund, warum ich nicht einfach tun kann
git submodule rm whatever
?
Die einfache Antwort stackoverflow.com/a/21211232/94687 ist nun die richtige, und sollte markiert werden, damit. Nun, es ist einfach
Das ist eigentlich nicht wahr. Dass die Antwort nicht Adresse entfernen der submodule Eintrag aus
Ich fand diesen Artikel sehr hilfreich bei der Beseitigung Submodule. Es enthält Informationen zum entfernen von Einträgen in der .gitsubmodules und .git/config-Dateien link
Bitte speichern Sie sich etwas Zeit und gehen direkt die Antwort, das funktioniert (im Jahr 2017): stackoverflow.com/a/36593218/528313
Ich habe schon den Rang Submodul Probleme für zwei Tage. Der Durchbruch kam, als ich das gefunden: forums.developer.apple.com/thread/13102. Im Grunde, Xcode, und vielleicht andere apps, den Kampf zu erweitern, url ' s mit '~'. Einmal habe ich geändert ssh://[email protected]/~/git/MyRepo.git zu ssh://[email protected]/home/username/git/MyRepo.git (schauen Sie sich den aktuellen Pfad auf Ihrem server), alle die Verrücktheit verschwand mit zehn Minuten. Siehe auch stackoverflow.com/questions/32833100/...
git rm modulename
und rm -rf .git/modules/modulename
Das ist eigentlich nicht wahr. Dass die Antwort nicht Adresse entfernen der submodule Eintrag aus
.git/config
. Die akzeptierte Antwort zeigt die up-to-date Weg, um vollständig zu entfernen a-Submodul. Es erklärte auch, mehr kurz und bündig in diese Antwort: stackoverflow.com/a/36593218/1562138Ich fand diesen Artikel sehr hilfreich bei der Beseitigung Submodule. Es enthält Informationen zum entfernen von Einträgen in der .gitsubmodules und .git/config-Dateien link
Bitte speichern Sie sich etwas Zeit und gehen direkt die Antwort, das funktioniert (im Jahr 2017): stackoverflow.com/a/36593218/528313
Ich habe schon den Rang Submodul Probleme für zwei Tage. Der Durchbruch kam, als ich das gefunden: forums.developer.apple.com/thread/13102. Im Grunde, Xcode, und vielleicht andere apps, den Kampf zu erweitern, url ' s mit '~'. Einmal habe ich geändert ssh://[email protected]/~/git/MyRepo.git zu ssh://[email protected]/home/username/git/MyRepo.git (schauen Sie sich den aktuellen Pfad auf Ihrem server), alle die Verrücktheit verschwand mit zehn Minuten. Siehe auch stackoverflow.com/questions/32833100/...
InformationsquelleAutor R. Martinho Fernandes | 2009-08-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit git1.8.3 (April 22nd, 2013):
Den Löschvorgang auch verwendet
git rm
(seit git1.8.5. Oktober 2013).Zusammenfassung
Dem 3-Schritte-Entfernung-Prozess würde dann sein:
Erklärung
rm -rf
: Dieses wird erwähnt in Daniel Schroeder's Antwort, zusammengefasst und durch Eonil in die Kommentare:git rm
: Siehe commit 95c16418:git submodule deinit
: Es ergibt sich aus dieser patch:Dieser kümmert sich, wenn die (de -) Initialisierung die Schritte (
.git/config
und.git/modules/xxx
)Seit git1.8.5, die
git rm
nimmt auch Pflege der:add
' Schritt, das zeichnet die url von einem Submodul in der.gitmodules
Datei: es müssen entfernt für Sie.git rm --cached path_to_submodule
(no trailing slash)Entfernt das Verzeichnis gespeichert in dem index mit einem speziellen Modus "160000", die ihn als ein Submodul root-Verzeichnis.
Wenn Sie vergessen, diesen letzten Schritt, und versuchen zu ergänzen, was war ein Submodul als regelmäßige Verzeichnis, erhalten Sie Fehlermeldung wie:
Hinweis: da Git 2.17 (Q2 2018), git submodule deinit ist nicht länger ein shell-Skript.
Es ist ein Aufruf einer C-Funktion.
Sehen commit 2e61273, commit 1342476 (14 Jan 2018) von Prathamesh Chavan (
pratham-pc
).(Zusammengefasst von Junio C Hamano --
gitster
-- in commit ead8dbe, 13 Feb 2018)submodule deinit
?hier ist ein Beispiel für jemanden erfolgreich: stackoverflow.com/a/16161950/6309. Aber Bedenken Sie, dass, im Gegensatz zu dem, was ich ursprünglich glaubte, 1.8.3 ist noch nicht freigegeben! Unter Unix können Sie es kompilieren aus den Quellen.
der spezielle Eintrag sollte Weg sein (das Verzeichnis ist nicht länger ein Submodul), und die
.gitmodules
sollte ok sein, aber ich würde trotzdem überprüfen Sie alles mit der.git
directory (ie die local config, in Ihrem lokalen repo: das ist nicht der änderung durch einengit pull
)ja, wenn Sie sich das entfernen der
.gitmodules
Eintrag und das entfernen der speziellen Eintrag in den index, und drücken Sie, repo, andere ziehen kann, und das Submodul wird verschwunden sein.Im aktuellen git (v1.9+), plain old
git rm submodule
genau das tut, was Sie wollen, wie andere Leute schon gesagt haben.InformationsquelleAutor VonC
Über die Seite Git-Submodule Tutorial:
Zu entfernen submodule müssen Sie:
.gitmodules
Datei..gitmodules
änderungengit add .gitmodules
.git/config
.git rm --cached path_to_submodule
(no trailing slash).rm -rf .git/modules/path_to_submodule
git commit -m "Removed submodule <name>"
rm -rf path_to_submodule
Siehe auch: alternative Schritte.
Eine kurze Antwort könnte sein: "weil keine solche Mannschaft vorhanden ist." Meine Vermutung ist, dass Sie versuchen, um die Entfernung von Submodul-Dateien vs-Submodul-Konfiguration explizit zur Vermeidung von versehentlichem Datenverlust. Vielleicht hat eine person würde denken, dass
git submodule rm
einfach entfernt Submodul Registrierung, und wäre überrascht, wenn der Befehl auch gelöscht lokalen repository. Alle lokalen änderungen würden unwiderruflich verloren. Und vielleicht eine weitere person würde denken, dass nur die Dateien, die entfernt werden würde.Ehrlich gesagt, ich weiß nicht, warum. Ich hoffe, Sie fügen Sie einen Befehl, aber. Diese 4 Schritte sind zu kompliziert.
Hier ist ein bash-Skript, das entfernt ein Submodul, erstellen Sie einfach ein alias für git-Submodul-rm 😉 gist.github.com/2491147
auch müssen rm -rf .git\modules\Submodul name?
InformationsquelleAutor
Nur ein Hinweis. Da git 1.8.5.2, zwei Befehle machen:
Als @Mark Cheverton ' s Antwort richtig darauf hingewiesen, wenn die zweite Zeile nicht verwendet, auch wenn Sie entfernt das Submodul für jetzt, den Rest .git/modules/the_submodule Ordner wird verhindern, dass die gleichen Submodul wird wieder Hinzugefügt oder ersetzt werden, in der Zukunft. Auch, wie @VonC erwähnt,
git rm
werden die meisten der job auf einem Submodul.--Update (07/05/2017)--
Nur um zu klären,
the_submodule
ist der relative Pfad von der submodule innerhalb des Projekts. Zum Beispiel, es istsubdir/my_submodule
wenn das Submodul in einem Unterverzeichnissubdir
.Wie schon richtig in den Kommentaren und andere Antworten, die beiden Befehle (obwohl funktional ausreichend, um zu entfernen a-Submodul), hinterlassen eine Spur in der
[submodule "the_submodule"]
Abschnitt.git/config
(Juli 2017), die entfernt werden können, mit einem Dritten Befehl:Dies gilt nicht entfernen Sie die submodule Eintrag aus
.git/config
. Siehe stackoverflow.com/a/36593218/1562138 für den kompletten Weg, um zu entfernen a-Submodul.Dies ist zu 100% absolut genial und funktioniert. Wow.
Ich habe gerade getestet mit Git 2.11.1 und ich beobachte das gleiche Verhalten wie vorher.
git init && git submodule add <repository> && git rm <name>
hinterlässt.git/config
Eintrag und die.git/modules/<name>
Verzeichnis und seinen Inhalt. Vielleicht haben Sie nicht initialisieren-Submodul vor, es zu entfernen?ich fühle mich sicherer, läuft dieser erste .. git submodule deinit -f the_submodule
InformationsquelleAutor tinlyx
Die Mehrheit der Antworten auf diese Frage sind veraltet, unvollständig oder unnötig Komplex.
Einem Submodul geklonten git 1.7.8 oder höher verlassen wird, höchstens vier Spuren von sich selbst in Ihrem lokalen repo. Der Prozess zum entfernen von vier Spuren wird durch die drei folgenden Befehle:
Antworten auf meine Frage: stackoverflow.com/questions/97875/rm-rf-equivalent-for-windows
kam 3 Jahre nach der akzeptierten Antwort, und ich denke, niemand hat es geschafft zu überzeugen, die OP zu akzeptieren, das man
DIES ist die nicht komplizierte Antwort im Jahr 2018?
das
InformationsquelleAutor fvgs
Einfachen Schritten
git config -f .git/config --remove-section submodule.$submodulename
git config -f .gitmodules --remove-section submodule.$submodulename
git rm --cached $submodulepath
rm -rf $submodulepath
rm -rf .git/modules/$submodulename
Bitte beachten Sie:
$submodulepath
nicht enthalten führende oder nachgestellte Schrägstriche.Hintergrund
Wenn Sie
git submodule add
es nur fügt es zu.gitmodules
, aberwenn du das getan hast
git submodule init
, es Hinzugefügt, um.git/config
.Also, wenn Sie möchten, entfernen Sie die Module, aber in der Lage sein, um es wieder schnell,
dann tun genau dies:
Ist es eine gute Idee, das zu tun
git rebase HEAD
ersten undgit commit
am Ende, wenn man diese in einem Skript.
Haben auch einen Blick auf eine Antwort auf Kann ich unpopulate ein Git-submodule?.
for dir in directory/*; do git rm --cached $dir; done
.Um diese der Liste aus, die verwendet werden können, in script zum rekursiven löschen -
git config -f .git/config -l | cut -d'=' -f1 | grep "submodule.$MODPATH" | sed 's/^submodule\.//' | sed 's/\.url$//'
- - sieht wie Sie wirklich tun dies für den Fall, wenn es etwas Durcheinander, sonst nurgit submodule | grep -v '^+' | cut -d' ' -f3
um die Liste der Module, in denen keine lokalen änderungen gemacht worden -
git submodule | grep '^+' | cut -d' ' -f2
Hinweis, ich müsse auch
submodulename
in doppelte Anführungszeichen"submodulename"
.. bezieht sich die.git/config
Datei#2 war genau das, was ich suchte, danke! +1
InformationsquelleAutor
Zusätzlich zu den Empfehlungen, ich hatte auch
rm -Rf .git/modules/path/to/submodule
zu können, fügen Sie eine neue Submodul mit dem gleichen Namen (in meinem Fall war ich das ersetzen einer Gabel mit dem original)Danke, ich brauchte das auch. @Anton, ich Stimme zu, und ich habe bearbeitet die topvoted Antwort hinzufügen diese info.
Ich benutzte die --name option ersetzen arbeiten... siehe stackoverflow.com/questions/14404704/...
InformationsquelleAutor Mark Cheverton
Entfernen Submodul Hinzugefügt:
Run:
Das ist es.
Für ältere Versionen von git (circa ~1.8.5) verwenden:
+1 Korrekte und saubere Art und Weise zu entfernen, die in neueren Versionen von git.
git rm
lässt immer noch Sachen in.git/modules/
. (2.5.4)es funktioniert für mich? Hinweis es werden nur die submodule Eintrag, wenn Sie den genauen Pfad übereinstimmt; wenn Sie umgezogen sind ein Submodul zu verwenden und dann
git rm
es nicht; Ein kurzer test mit 2.5.4 auf meinem mac aktualisiert die .gitmodules-Datei, wie in der Dokumentation beschrieben hier: git-scm.com/docs/git-rm#_submodules ... aber wenn Sie gefunden haben, eine Art Kombination von Plattform - / version, wo dies nicht passiert, sollten Sie wahrscheinlich die lodge einen Fehler über es.Diese Antwort ist so nicht ganz richtig.
git rm
Blätter Zeug in.git/modules/
dir und.git/config
- Datei (ubuntu, git 2.7.4). Andere Antwort 100% ig funktioniert: stackoverflow.com/a/36593218/4973698InformationsquelleAutor Doug
Müssen Sie entfernen den Eintrag in
.gitmodules
und.git/config
, und entfernen Sie das Verzeichnis des Moduls aus der Geschichte:Wenn Sie schreiben werden, das auf git-Mailingliste wohl jemand tun wird ein shell-Skript für Sie.
InformationsquelleAutor Carmine Paolino
Können Sie ein alias verwenden, um zu automatisieren, die Lösungen, die von Dritten bereitgestellt werden:
Setzen, dass in der git-config, und dann können Sie tun:
git rms path/to/submodule
InformationsquelleAutor Charles
Zusammen zu fassen, das ist, was Sie tun sollten :
Set
path_to_submodule
var (no trailing slash):path_to_submodule=path/to/submodule
Löschen Sie die entsprechende Zeile aus der .gitmodules-Datei:
git config -f .gitmodules --remove-section submodule.$path_to_submodule
Löschen Sie den entsprechenden Abschnitt aus .git/config
git config -f .git/config --remove-section submodule.$path_to_submodule
Unstage und entfernen $path_to_submodule nur aus dem index (um zu verhindern, dass Informationen verloren gehen)
git rm --cached $path_to_submodule
Vorgenommene änderungen nachverfolgen .gitmodules
git add .gitmodules
Begehen die superproject
git commit -m "Remove submodule submodule_name"
Löschen, die jetzt nicht Submodul Dateien
rm -rf $path_to_submodule
rm -rf .git/modules/$path_to_submodule
Ich empfehle, zu aktualisieren, zu
git submodule update
. Und wenn die Submodule Pfade nicht korrekt aktualisiert (git wirft einen Fehler), entfernen Sie Sie:rm -rf .git/modules/<submodule> && rm -rf <submodule> && git submodule update
InformationsquelleAutor luissquall
Wenn das Submodul wurde versehentlich Hinzugefügt, weil Sie Hinzugefügt haben, engagiert und schob einen Ordner, der war bereits ein Git-repository (enthalten
.git
), werden Sie nicht haben eine.gitmodules
- Datei zu Bearbeiten, oder irgendetwas in.git/config
. In diesem Fall brauchst du ist :FWIW, Ich habe auch entfernt die
.git
Ordner, bevor Sie diegit add
.InformationsquelleAutor Oli Studholme
Fand ich
deinit
funktioniert gut für mich:Vom git docs:
es nicht entfernen .git/modules/.. . Sollten Sie diese entfernen, siehe die Antwort von @fvgs
InformationsquelleAutor Damjan Pavlica
Nach dem Experimentieren mit all den verschiedenen Antworten, die auf dieser Website, landete ich mit dieser Lösung:
Dieser wieder die exakt gleichen Zustand, wie vor dem hinzufügen der submodule. Sie können sofort fügen Sie das Submodul wieder, das war nicht möglich mit den meisten der Antworten hier.
Dies lässt Sie mit einem sauberen checkout ohne änderungen zu Begehen.
Getestet wurde dies mit:
git rm --cached $path
dannrm -rf $path
stattgit rm -r $path
?InformationsquelleAutor udondan
Was ich momentan arbeite Dez 2012 (verbindet die meisten dieser Antworten):
InformationsquelleAutor Lance Rushing
Hier ist was ich getan habe :
1.) Löschen Sie den entsprechenden Abschnitt aus der .gitmodules-Datei. Sie können unten Befehl:
2.) Bühne die
.gitmodules
änderungen3.) Löschen Sie den entsprechenden Abschnitt aus
.git/config
. Sie können unten Befehl:4.) Entfernen Sie die gitlink (no trailing slash):
5.) Bereinigung der
.git/modules
:6.) Commit:
7.) Löschen Sie die jetzt nicht Submodul Dateien
fatal: no submodule mapping found in .gitmodules for path 'submodule_name'
bei Schritt 3. Beide Schritte waren notwendig, aber. (git v2.8.2)InformationsquelleAutor Ishan Liyanage
Habe ich vor kurzem erfahren eine git-Projekt, welches viele nützliche git verwandter Befehl: https://github.com/visionmedia/git-extras
Installieren Sie es und geben Sie :
Dann Dinge erledigt werden. Das Submodul-Verzeichnis wird entfernt repo-und existiert noch in Ihrem Dateisystem. Sie können dann einen commit der änderung wie:
git commit -am "Remove the submodule"
.InformationsquelleAutor Chien-Wei Huang
Musste ich nehmen John Douthat ist weicht einen Schritt weiter und
cd
in der Submodul-Verzeichnis, und entfernen Sie dann das Git-repository:Dann konnte ich die Dateien wieder Einchecken als Teil des übergeordneten Git-repository, ohne den alten Bezug zu einem Submodul.
git rm --cache
Schritt.InformationsquelleAutor Kyle Clegg
Hier sind die 4 Schritte, die ich für notwendig oder nützlich sind (wichtigste zuerst):
In der Theorie,
git rm
im Schritt 1 kümmern sollte. Hoffentlich wird der zweite Teil der OP-Frage kann positiv beantwortet werden, eines Tages (das kann man in einem Befehl).Ab Juli 2017, Schritt 2 ist notwendig, um Daten in
.git/modules/
denn sonst kann man nicht z.B. hinzufügen von Submodul zurück in die Zukunft.Können Sie wahrscheinlich Weg mit den beiden oben genannten Schritte für git 1.8.5+ als tinlyx Antwort festgestellt, als alle
git submodule
Befehle scheinen zu funktionieren.Schritt 3 entfernt die Sektion für
the_submodule
in der Datei.git/config
. Dies sollte getan werden, für die Vollständigkeit. (Der Eintrag kann Probleme verursachen, für ältere git-Versionen, aber ich habe keinen zum testen).Für diese, die meisten Antworten empfehlen die Verwendung
git submodule deinit
. Ich finde es mehr explizite und weniger verwirrend zu verwendengit config -f .git/config --remove-section
. Nach der git-submodule Dokumentation,git deinit
:Last but not least, wenn Sie nicht
git commit
Sie/möglicherweise erhalten Sie eine Fehlermeldung, wenn dabeigit submodule summary
(git 2.7):Dies ist unabhängig davon, ob Sie die Schritte 2 oder 3.
InformationsquelleAutor laser
InformationsquelleAutor
Ich nur das gefunden .Submodul (genauen Namen vergessen) versteckte Datei, hat es eine Liste... können Sie löschen Sie Sie einzeln Weg. Ich hatte nur eine, also habe ich es gelöscht. Einfach, aber es kann mess up, Git, da ich nicht weiß, wenn etwas ist angebracht, um das Submodul. Scheint soweit ok, abgesehen von libetpan üblichen upgrade-Problem, aber das ist (hoffentlich) nicht verwandt ist.
Bemerkt niemand gepostet manuell löschen, so ergänzt
.gitmodules
InformationsquelleAutor Stephen J
Wenn Sie haben soeben das Submodul, und zum Beispiel, Sie einfach Hinzugefügt, die falsche Submodul oder Sie fügte hinzu, es an der falschen Stelle, einfach
git stash
dann den Ordner löschen. Dies wird vorausgesetzt, dass das hinzufügen der submodule ist die einzige Sache, die Sie haben in der jüngsten repo.InformationsquelleAutor botbot
Mit git 2.17 und oben ist es einfach:
InformationsquelleAutor Albert Tobac
Habe ich ein bash-Skript zu erleichtern, die Beseitigung Prozess. Es wird auch überprüft, ob es änderungen in der repo Links, nicht gespeicherte und um Bestätigung bittet.
Es wurde getestet auf
os x
wäre interessant zu wissen, ob es funktioniert, wie auf gängigen linux-Distributionen sowie:https://gist.github.com/fabifrank/cdc7e67fd194333760b060835ac0172f
InformationsquelleAutor Techradar
In der neuesten git nur 4 operation erforderlich ist, um die zu entfernen git-submodule.
.gitmodules
git add .gitmodules
git rm --cached <path_to_submodule>
git commit -m "Removed submodule xxx"
InformationsquelleAutor rashok