925 Stimmen

Wie kann man das entfernte Repository für ein Git-Submodul ändern?

Ich habe ein Git-Repository mit einem Submodul darin erstellt. Ich kann dem Submodul selbst sagen, dass es seinen Pfad zum entfernten Repository ändern soll, aber ich bin mir nicht sicher, wie ich dem übergeordneten Repository sagen kann, dass es den Pfad zum entfernten Repository für das Submodul ändern soll.

Es würde mich nicht wundern, wenn ich Pech habe und die Dinge manuell erledigen muss, denn selbst das Löschen von Untermodulen ist nicht einfach.

14voto

FelipeC Punkte 7866

Bearbeiten Sie einfach Ihre .git/config Datei. Zum Beispiel: Wenn Sie eine "gemeinsam" Submodul können Sie dies im Supermodul tun:

git config submodule.common.url /data/my_local_common

3voto

LuGo Punkte 4728

git config --file=.gitmodules -e öffnet den Standardeditor, in dem Sie den Pfad aktualisieren können

-1voto

Jasha Punkte 2740

Ein Brute-Force-Ansatz:

  • Aktualisierung der .gitmodules Datei im Supermodul auf die neue Submodul-URL verweisen,
  • Hinzufügen und Übertragen der Änderungen an supermodule/.gitmodules ,
  • einen neuen Klon des Supermoduls an einem anderen Ort auf Ihrem Computer erstellen (und dabei sicherstellen, dass die letzten Änderungen an der .gitmodules Datei werden in den Klon übernommen),
  • wechseln Sie Ihr Arbeitsverzeichnis in das neue Klon des Supermoduls,
  • laufen. git submodule update --init --remote path-to-submodule auf dem Submodul,

et voilà! Das Submodul im neuen Klon des Supermoduls ist richtig konfiguriert!

-3voto

Potherca Punkte 11798

Viele Leute (sowohl hier als auch im Internet insgesamt) schlagen Lösungen vor, die eine manuelle Bearbeitung oder Löschung mehrerer Dateien erfordern. Aber das ist wirklich nicht nötig!

Selbst in Umgebungen, in denen Git 2.25 (und damit git submodule set-url <path> <newurl> ) nicht verfügbar sind, ist die einfachste Lösung, das Submodul einfach "abzumelden" und es mit der neuen URL wieder hinzuzufügen.

Je nach Git-Version und Submodul-Setup können Sie könnte manuell entfernen müssen <path> bevor es wieder hinzugefügt wird. Keine weiteren manuellen Aktionen erforderlich!

git submodule deinit <path>
rm -rf <path>
git submodule add <repository> [<path>]

Danach wird die .gitmodules Datei hat eine andere URL und sollte übertragen werden. Alle anderen Stellen (Konfiguration, Arbeitsbaum) wurden bereits von Git bearbeitet.

Zu erklären, was deinit möchte ich gerne aus dem Git-Handbuch zitieren:

deinit [-f|--force] (--all|[--] <path>…)

Deregistrierung der angegebenen Untermodule, d.h. Entfernen des gesamten submodule.$name Abschnitt von .git/config zusammen mit ihrem Arbeitsbaum. Weitere Aufrufe [..] überspringen alle nicht registrierten Untermodule, bis sie erneut initialisiert werden

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