Git – So ändern Sie URL/Pfad eines Submoduls

Lesezeit: 6 Minuten

Benutzeravatar von Black
Schwarz

Das ist mein .gitmodules:

[submodule "app/code/EthanYehuda/CronjobManager"]
        path = app/code/EthanYehuda/CronjobManager
        url = https://[email protected]/some_user/ethanyehuda_cronjobmanager.git

Ich muss die URL zu ändern https://github.com/Ethan3600/magento2-CronjobManager.git

Also habe ich es einfach geändert:

[submodule "app/code/EthanYehuda/CronjobManager"]
        path = app/code/EthanYehuda/CronjobManager
        url = https://github.com/Ethan3600/magento2-CronjobManager.git

Dann habe ich die Datei zum Staging-Bereich hinzugefügt und einen Commit durchgeführt:

git add .gitmodules
git commit -m "change url of submodule xy"

Dann habe ich ausgeführt git submodule update --init. Aber wenn ich gehe app/code/EthanYehuda/CronjobManager und die Fernbedienung zeigen, dann bekomme ich noch https://[email protected]/some_user/ethanyehuda_cronjobmanager.git

  • Beantwortet das deine Frage? Wie ändere ich das Remote-Repository für ein Git-Submodul?

    – Poterka

    5. Oktober 2021 um 11:50 Uhr

Benutzeravatar von jthill
jthill

.gitmodules die vorgeschlagenen Standardeinstellungen enthält, werden Ihre Änderungen beim Einrichten nachfolgender Klone wirksam.

Sobald jedoch jemand den Klon erstellt hat, ist das resultierende Repository nur ein Repository. Sie können in das Verzeichnis Ihres vorhandenen Submoduls gehen und seine Ursprungs-Remote-URL auf die übliche Weise ändern, aber die git submodule Befehl hat eine praktische Abkürzung,

git submodule sync

um alle Lücken für Sie auszufüllen.

sync [--recursive] [--] [<path>…​]

Synchronisiert die Remote-URL-Konfigurationseinstellung der Submodule mit dem in angegebenen Wert .gitmodules. Es wirkt sich nur auf die Submodule aus, in denen bereits ein URL-Eintrag vorhanden ist .git/config (das ist der Fall, wenn sie initialisiert oder neu hinzugefügt werden). Dies ist nützlich, wenn sich Submodul-URLs stromaufwärts ändern und Sie Ihre lokalen Repositories entsprechend aktualisieren müssen.

git submodule sync synchronisiert dabei alle Submodule git submodule sync -- A synchronisiert nur Submodul “A”.

Wenn --recursive angegeben ist, wird dieser Befehl in den registrierten Submodulen rekursiv ausgeführt und alle darin verschachtelten Submodule synchronisiert.

  • Funktioniert nicht. Ich habe die URL eines anderen Repositorys (app\code\Yireo\Webp2) mit geändert git remote set-url origin https://github.com/yireo/Yireo_Webp2.git. Dann habe ich ausgeführt git submodule sync. Aber die Datei .gitmodules wurde nicht mit der neuen URL aktualisiert.

    – Schwarz

    31. Januar 2020 um 14:24 Uhr

  • Nein, Sie müssen bereits aktualisiert haben .gitmodules, dann Submodul sync. Wie die zitierten Dokumente sagen, aktualisiert die Synchronisierung die Remote-Einstellungen von dem, was drin ist .gitmodules.

    – jthill

    31. Januar 2020 um 14:26 Uhr

  • Ich denke, diese Lösung wird funktionieren, wenn der Git-Verlauf nicht ganz anders ist.

    – Schwarz

    31. Januar 2020 um 15:37 Uhr

  • Häh? Wie wäre das wichtig? Git sucht nach dem aufgezeichneten Commit für einen Pfad in der dort verfügbaren Historie. URLs auf ein neues Repo umstellen, dort den Verlauf abrufen, fertig. Jetzt hat Ihr Submodul-Repo die Historien vom alten Upstream und dem neuen, daran ist nicht einmal ein bisschen falsch.

    – jthill

    31. Januar 2020 um 15:41 Uhr

  • Ein typisches Beispiel: Das war kein Verzeichnis, Sie haben nur einen Zeiger auf das unberührte Submodul-Repository in Ihrem Hauptprojekt gelöscht .gitund git submodule update stellte den Zeiger wieder her.

    – jthill

    31. Januar 2020 um 16:12 Uhr

Seit git v2.25.0 (Änderungsprotokoll), git submodule Neues lernen set-url Befehl.

Um es zu benutzen, tun Sie es einfach git submodule set-url -- <path> <url>

Für Sie ist es:
git submodule set-url -- app/code/EthanYehuda/CronjobManager https://github.com/Ethan3600/magento2-CronjobManager.git

Hinweis: Wo immer Sie sich in Ihrem Git befinden, sollte der Pfad relativ zum obersten Verzeichnis sein.

Weitere Informationen finden Sie in dieser Antwort.

Diese Befehle erledigen die Arbeit an der Eingabeaufforderung, ohne Dateien im lokalen Repository zu ändern

git config --file=.gitmodules submodule.Submod.url https://github.com/username/ABC.git
git config --file=.gitmodules submodule.Submod.branch Development
git submodule sync
git submodule update --init --recursive --remote

  • Das sieht viel komplizierter aus, als es sein sollte. Ist das der offizielle Weg?

    – Schwarz

    31. Januar 2020 um 13:10 Uhr

Benutzeravatar von Black
Schwarz

Für mich haben die gefundenen Lösungen nicht funktioniert, da sich die Git-Historie meines Repositorys vollständig von der Historie des neuen Repositorys unterscheidet.

Lassen Sie mich erklären. Ich habe ein Projekt als Zip-Datei erhalten. Ich habe ein neues Repo initialisiert und die Dateien übergeben und in meinen Bitbucket geschoben.

Dann fand ich heraus, dass es sich um ein öffentliches Github-Projekt handelt. Also wollte ich die URL zum Github-Repository ändern. Aber sie haben völlig unterschiedliche Git-Verläufe (Mein Repo hat nur einen anfänglichen Commit, während das Github-Repo alle Commits enthält.)

Es wird also nicht funktionieren, indem Sie einfach die URLs ändern.

Also musste ich das Submodul löschen und neu erstellen.

Hinweis: <name_of_submodule> = app/code/EthanYehuda/CronjobManager (in meinem Fall)

Löschen:

git submodule deinit <name_of_submodule>
git rm -f <name_of_submodule>
rm -rf .git/modules/<name_of_submodule>
git commit -m "Deleted submodule xy"

Neu hinzufügen:

git submodule add --force https://github.com/example/foo-bar.git <name_of_submodule>
git commit -m "Add submodul xy"

Fehler beim Abrufen des Submoduls app/code/EthanYehuda/CronjobManager: Der Server hat Anforderungen an das nicht angegebene Objekt 9b677ef0e750acb9292030306bd97a3ee2734c61 abgelehnt

↑ Wenn ein solcher Fehler auftritt, nachdem Sie das Projekt auf einen Klon gezogen haben, z. B. Staging, dann müssen Sie das tun sync und update --init nach git pull:

git submodule sync
git submodule update --init

Sie müssen Ihr Submodul löschen und neu synchronisieren, nachdem Sie die URL aktualisiert haben.

Bitte beziehen Sie sich auf diese Antwort. https://stackoverflow.com/a/14405542/1895270

  • Funktioniert nicht. Versuchte es Schritt für Schritt … Ich verstehe error: The server rejects a request for an object not offered 86bbb310a268106bae244bc50bb6232fa8f0727f.

    – Schwarz

    31. Januar 2020 um 12:34 Uhr

  • "fetch" executed in submodule path 'app / code / Fooman / GoogleAnalyticsPlus', but 86bbb310a268106bae244bc50bb6232fa8f0727f not contain. Requesting this commit directly failed.

    – Schwarz

    31. Januar 2020 um 12:43 Uhr

  • Ich denke, der Fehler wird angezeigt, weil mein erstes Repository mein eigenes ist, das nur einen anfänglichen Commit hat, und das neue mit einer ganz neuen Git-Historie von Github

    – Schwarz

    31. Januar 2020 um 12:59 Uhr

  • Wenn Sie nicht zu einem Repository mit einem völlig anderen Git-Verlauf wechseln, funktioniert Ihre Methode vermutlich.

    – Schwarz

    31. Januar 2020 um 13:11 Uhr

  • Funktioniert nicht. Versuchte es Schritt für Schritt … Ich verstehe error: The server rejects a request for an object not offered 86bbb310a268106bae244bc50bb6232fa8f0727f.

    – Schwarz

    31. Januar 2020 um 12:34 Uhr

  • "fetch" executed in submodule path 'app / code / Fooman / GoogleAnalyticsPlus', but 86bbb310a268106bae244bc50bb6232fa8f0727f not contain. Requesting this commit directly failed.

    – Schwarz

    31. Januar 2020 um 12:43 Uhr

  • Ich denke, der Fehler wird angezeigt, weil mein erstes Repository mein eigenes ist, das nur einen anfänglichen Commit hat, und das neue mit einer ganz neuen Git-Historie von Github

    – Schwarz

    31. Januar 2020 um 12:59 Uhr

  • Wenn Sie nicht zu einem Repository mit einem völlig anderen Git-Verlauf wechseln, funktioniert Ihre Methode vermutlich.

    – Schwarz

    31. Januar 2020 um 13:11 Uhr

1439360cookie-checkGit – So ändern Sie URL/Pfad eines Submoduls

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

Privacy policy