Wie ersetze ich ein Git-Submodul durch ein anderes Git-Repo?
Insbesondere habe ich ein Submodul:
- befindet sich an
./ExternalFrameworks/TestFramework
diesem Punkt zu einem Git Repo[email protected]:userA/TestFramework.git
- Ich möchte, dass es jetzt darauf hinweist
[email protected]:userB/TestFramework.git
.
Das Problem ist, dass wenn ich das Submodul mit der hier beschriebenen Methode lösche , es dann mit dem Befehl erneut hinzufüge
git submodule add [email protected]:userB/TestFramework.git
Ich erhalte diesen Fehler:
A git directory for 'ExternalFrameworks/TestFramework' is found locally with remote(s):
origin [email protected]:userA/TestFramework.git
If you want to reuse this local git directory instead of cloning again from
[email protected]:userB/TestFramework.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.
git
git-submodules
joseph.hainline
quelle
quelle
Antworten:
Wenn sich der Speicherort (URL) des Submoduls geändert hat, können Sie einfach:
.gitmodule
Datei, um die neue URL zu verwendenrm -rf .git/modules/<submodule>
rm -rf <submodule>
git submodule sync
git submodule update
Weitere Informationen finden Sie an anderer Stelle:
quelle
rm -rf .git/modules/<submodule>
bevor es für mich funktionierte.git submodule sync
nachrm -rf .git/modules/<submodule>
gibtfatal: Not a git repository: ../.git/modules/<submodule>
. Irgendwelche Tipps? Ich habe das Submodul zunächst übergit submodule add https://<submodule-url>
gemäß den Git-Dokumenten erstellt ...Löschen Sie zunächst das aktuelle Submodul mit der hier bereits erwähnten Methode , die ich der Einfachheit halber einbeziehe:
.gitmodules
Datei.git/config
git rm --cached path_to_submodule
(kein abschließender Schrägstrich)Fügen Sie nun das neue Submodul mit dem
--name
Flag hinzu. Dies gibt git einen alternativen Namen, auf den Sie.git/config
für das Submodul verweisen können, um einen Konflikt mit dem historisch vorhandenen Submodul zu lösen, das Sie in Ihrem vorherigen Verlauf noch bearbeiten möchten.Geben Sie also Folgendes ein:
und Sie werden das Submodul an dem Pfad laden, den Sie erwarten.
quelle
.git/modules/<path_to_submodule>
.--name
. Ich war mir der damit verbundenen Probleme nicht bewusst und konnte ein Submodul erst ersetzen, als ich von dieser Option Gebrauch gemacht habe (dank Ihrer Antwort).git submodule add --name old-name-to-keep [email protected]:userB/new-repository.git old-name-to-keep
Mit diesen Befehlen wird die Eingabeaufforderung bearbeitet, ohne dass Dateien im lokalen Repository geändert werden.
quelle
Was dies für mich behoben hat, war in der Wurzel Ihres Git-Repo (nicht des Submoduls), run
Dann sollten Sie in der Lage sein, wie gewohnt hinzuzufügen.
quelle
Der einfachste Weg, den ich gefunden habe, ist folgender:
Die Idee, meine
.gitmodules
manuell zu ändern, gefiel mir nicht . Ich habe auch einen kleinen Blogpost darüber geschrieben.quelle
Wenn Sie die Remote-URL nur für diesen Klon ändern möchten :
Dies wirkt sich nicht auf die
.gitmodules
Datei im übergeordneten Projekt aus, sodass sie nicht an andere Entwickler weitergegeben wird.Dies wird als „benutzerspezifischen Datensatzänderungen“ beschrieben hier .
Nicht ausführen,
git submodule sync
da dies wieder auf die Standard-URL zurückgesetzt wird.quelle