2016-08-24 10 views
0

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?

+0

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

Antwort

1

git-svn ist nicht das richtige Tool für einmalige Konvertierungen von Repositories. Es ist ein großartiges Tool, wenn Sie Git als Frontend für einen vorhandenen SVN-Server verwenden möchten, aber für einmalige Conversions sollten Sie nicht verwenden, sondern svn2git, was für diesen Anwendungsfall wesentlich besser geeignet ist.

Es gibt pleny Werkzeuge genannt svn2git, die wahrscheinlich beste ist die KDE eine von https://github.com/svn-all-fast-export/svn2git. Ich empfehle dringend, das Werkzeug svn2git zu verwenden. Es ist das Beste, was ich kenne, und es ist sehr flexibel in was man mit seinen Regeldateien machen kann.

Wenn Sie nicht 100% über die Geschichte Ihres Repository sind, svneverever von http://blog.hartwork.org/?p=763 ist ein großartiges Werkzeug, um den Verlauf eines SVN-Repository bei der Migration zu Git zu untersuchen.

Sie können die Regeldatei so schreiben, dass Sie Ihr gesamtes SVN-Repository in einem sehr performanten Lauf in ein ordnungsgemäßes Git-Repository konvertieren können.

+0

Um zu verdeutlichen, verwende ich svn2git mit drei verschiedenen Parametersätzen gegen ein SVN-Repository und versuche dann, die Ergebnisse zusammenzufassen (weil ein einzelner svn2git-Befehl nicht in das nicht-standardmäßige Layout des SVN-Repos passt). – jkeirstead

+0

Um zu verdeutlichen, verwendest du ** nicht ** das von mir empfohlene Dienstprogramm svn2git, sonst würdest du keine Umrisse springen müssen, so wie du es versuchst. ;-) – Vampire

Verwandte Themen