Git verwirrte, wenn ein Update in meinen Unterbaum verschmelzenden
-
19-09-2019 - |
Frage
Wir haben bisher viele Submodule in unsere Repositories, aber die Wartbarkeit unserer Projekte steigern wir einen experimentellen Zweig begonnen, wo wir sie alle mit Teilbäume ersetzt.
Das funktionierte gut -. Aber jetzt, wenn ich versuche, eine der Teilbäume zu aktualisieren es verschmilzt fälschlicherweise das Update in ein völlig falsches Verzeichnis, das nicht einmal ein Teilbaum
Das Haupt Repository, in dem der Zweig "Teilbaum" den experimentellen Zweig enthält, ist: git: //github.com/hugowetterberg/goodold_drupal.git
Das Repository fusionieren in Updates von: git: //github.com/voxpelli/drupal-oembed.git
Merging by doing: git merge es subtree oEmbed / Master
Der Weg der Updates sollten in zusammengefügt werden: sites / all / modules / oEmbed /
Der Weg, den sie verschmolzen werden in: Module / Aggregator / Übersetzungen /
Wer eine Vorstellung davon hat, wie den Updates in die Unterstrukturen zu bekommen oder was kann der Fehler sein?
Lösung
Das ist leider ein Fehler (oder fehlende Funktion) in dem "git merge es subtree" Code. Es eigentlich Vermutungen die Teilbäume, die Sie zusammenführen möchten. Normalerweise ist diese magische Weise erweist sich als richtig, aber wenn Ihr Unterbaum eine Menge Änderungen enthält (oder war ursprünglich leer, oder was auch immer), dann kann es nicht spektakulär.
Der beste Weg, um es zu arbeiten, ist:
-
Führen Sie die Dateien, wie Sie oben haben.
-
manuell verschieben Sie alle resultierenden Dateien, wo sie sollte sind gegangen.
-
git commit -a --amend
die Zusammenführung verpflichten zu korrigieren.
Future verschmilzt wahrscheinlich gut funktionieren, es sei denn, dieses Verzeichnis ständig in unglaublichen Mengen an Fluss ist.
Der experimentelle " git subtree " Befehl einen --prefix
Parameter hat, dass Sie dies außer Kraft setzen lassen soll, aber leider ist es zur Zeit nicht arbeiten (da es Arbeit erfordert um „git merge es subtree“ -Funktionen und es ist nicht Zeit, es zu tun).
Wie auch immer, dies ist eine seltene Situation sein sollte, und die Abhilfe nicht auch für zukünftigen verschmilzt des gleichen Projektes benötigt werden.
Andere Tipps
git Version 1.7.9.5
git pull -s subtree <remote name> <remote branch>
(merge ging in das falsche Verzeichnis)
git reset --hard HEAD^
git pull -s subtree -Xsubtree=correct/directory <remote name> <remote branch>
Beachten Sie, dass es keinen Schrägstrich auf dem Verzeichnis
Danke apenwarr