Ich bin gerade ein SVN-Repository in Git importieren. Die Struktur des SVN-Repositorys ist ein bisschen unordentlich, also muss ich es in drei separate Git-Repositories konvertieren und sie dann alle zusammenführen.Führen Sie Zusammenführungen in gepfropften Git-Geschichte
Wenn dies ein einfaches Projekt mit drei Teilen zu einer einzigen Geschichte ist, dann könnte ich sie nur rebase auf das anderen, zum Beispiel:
cd part3
git remote add -f part1 url_to_part1
git remote add -f part2 url_to_part2
git rebase part2/master
git rebase part1/master
jedoch part3
in meinem obigen Beispiel enthält Dutzende von Tags und drei Zweige. Wenn Teile 1 und 2 sauber in master
(gut, Stamm) innerhalb SVN zusammengeführt worden wären, würde ich etwas wie this tun, um den Zweig korrekt in den Verlauf einzupfropfen. Dies hat den Vorteil, dass alle Tags im Gegensatz zu einer Rebase an ihrem Platz bleiben.
Aber einer der Zweige hat ein verwaistes Commit, das wir jetzt in die Geschichte einfügen möchten. Wenn ich nun versuche, die Geschichte mit dem Transplantat zu korrigieren, gehen die Änderungen aus dem verwaisten Commit verloren. Im folgenden Beispiel ist die Zusammenführung von X und C in SVN erfolgt, und ich kann die Verknüpfung mit einem Graft erstellen. Aber ich will das verwaiste begehen O zwischen C und D, fusionieren, während die Tags auf Commits E Erhaltung, G usw.
A-B-C-[ ]-D-E-F-G-H-...
\//
X--O
Gibt es eine Möglichkeit, dass ich die Graphstruktur angeben kann etwas mit wie die Transplantate Datei aber führen Sie dann die implizierten Zusammenführungen tatsächlich aus? Oder gibt es einen Filter-Zweig-Befehl, den ich hier verwenden sollte?
Die [Anmerkung zu dieser Frage] (http://stackoverflow.com/questions/3810348/setting-git-parent-pointer-to-a-different-parent/3811028#3811028) schlägt vor, dass das mit nicht möglich ist Transplantate. Ich denke, ich muss umbauen und dann die Tags manuell verschieben. – jkeirstead