2016-10-02 12 views
1

Dies ist der SVN trunk Pfad git:Wie SVN-Zweig importieren mit Stamm Geschichte

http://svn/path/libs/trunk/mylib 

Und hier ist der branch Pfad:

http://svn/path/libs/branches/mylib/mylib-feature-branch 

ich nur den Zweig zu git migrieren müssen , aber ich brauche auch seinen Stammverlauf, bevor der Zweig erstellt wurde.

Der folgende Befehl holt nur die Zweig Geschichte:

git svn clone http://svn/path/libs/branches/mylib/mylib-feature-branch 

ich this answer gelesen haben, konnte aber nicht herausfinden, wie ich sollte die git svn clone Befehl ändern Sie die vollständige Geschichte der Branche zu haben. Jeder Rat würde geschätzt werden.

+0

Verwenden Sie dies als einmalige Migration und dann nur git von dort, oder möchten Sie Git als Frontend für den SVN-Server verwenden, Git-Commits zurück auf den SVN-Server commit? – Vampire

+0

@Vampire Dies wird eine einmalige Migration sein. – Meysam

Antwort

1

git-svn ist nicht das richtige Tool für einmalige Konvertierungen von Repositories oder Repository-Teile. 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.

Sie können die Regeldatei leicht so einrichten, dass genau Ihre Verzweigung und ihr Verlauf migriert werden.

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.


Obwohl git-svn ist einfacher, mit zu beginnen, hier sind einige weitere Gründe, warum die KDE mit svn2git statt git-svn überlegen ist, neben seiner Flexibilität:

  • die Geschichte ist viel besser wieder aufgebaut und Reinigungsmittel durch svn2git (wenn die richtigen verwendet wird), ist dies besonders der Fall für komplexere Geschichten mit Zweigen und verschmilzt und so weiter
  • die Tags sind echte Tags und keine Niederlassungen in Git
  • mit git-svn Die Tags enthalten ein extra leeres Commit, das sie auch nicht zu den Zweigen macht, so dass eine normale fetch sie erst erhält, wenn Sie dem Befehl geben, da standardmäßig nur Tags auf abgeholte Zweige geholt werden.Mit der richtigen svn2git-Tags sind, wo sie hingehören
  • , wenn Sie das Layout in SVN geändert haben, können Sie einfach diese Konfiguration mit svn2git, mit git-svn werden Sie Geschichte verlieren schließlich
  • mit svn2git können Sie auch Split ein SVN-Repository in leicht mehrere Git-Repositories
  • oder kombinieren mehrere SVN-Repositories im gleichen SVN Wurzel in einem Git-Repository leicht
  • die Umwandlung eine Unmenge mal schneller mit der richtigen svn2git ist als bei git-svn

Es gibt viele Gründe, warum git-svn schlechter ist und die KDE svn2git ist überlegen. :-)

+0

Hallo, ich bekomme das gleiche 'svn_dirent_join: Assertion svn_dirent_is_canonical (Basis, Pool) fehlgeschlagen. Fehler wie hier [hier] (https://stackoverflow.com/questions/38770736/svn2git-object-reference-error#comment64942888_38784776) . Leider wurde die Lösung auf dem GitHub gelöscht. Könnten Sie mir bitte sagen, was das Problem war? – Meysam

+0

oh, ich denke, ich muss Befehle direkt auf dem Server laufen, oder? – Meysam

+0

Wie die Dokumentation sagt, benötigen Sie eine lokale Kopie des SVN-Verzeichnisses. Ob Sie das Repo in Ihre lokale Box laden oder 'svn2git' auf dem SVN-Server ausführen, spielt keine große Rolle. – Vampire