SVN to GIT (Part I)

Late to the party, ich weiß. Aber wenigstens bin ich irgendwann doch noch angekommen. Beflügelt durch eine wirklich gute Schulung die ich bei einem Kunden genießen durfte habe ich beschlossen, mein ziemlich umfangreiches SVN Repository nach git zu migrieren. Dabei kann man gleich aufräumen und “sinnvolle” Repositories erzeugen von Dingen, die zusammengehören. Ich habe mein SVN allein verwendet und auch fast keine Branches erzeugt, so dass die Migration ziemlich leicht ist. Für jeden SVN Benutzer legt man ein Eintrag in einer Mapping-Datei an, damit die in git übliche Benutzername / Email Konstruktion zugeordnet werden kann. Beispiel:
hmueller = Hans Müller
Dann erzeugt man z.B. in einem Verzeichnis git_svn ein SVN Repo mit folgendem Kommando
git svn clone svn://lager/project --no-metadata -A author.txt git_svn/
Auf den Parameter --stdlayout habe ich verzichtet, da mein SVN Repo keine trunk/branches Struktur hat. Wenn “git svn” nicht funktioniert ist es wahrscheinlich nicht installiert. Auf einem Raspberry Pi ist das per default so. Man kann dann das Paket mit sudo apt-get install git-svn nachinstallieren.
Nicht verzagen, das dauert (auf dem Raspberry Pi) je nach Repository-Größe ewig. Das Ergebnis ist ein Git-Repo, in der die komplette Versionshistorie enthalten ist. Und das Beste: Die Verknüpfung zu SVN ist nach wir vor erhalten. Kommen noch Änderungen in SVN an, können diese mit einem
git svn fetch nachgezogen werden, ohne das man das Repository erneut klonen muss. Sehr praktisch! Jetzt gibt es die Situation, dass ggf. der HEAD Pointer irgendwo hinzeigt bzw. die Git Revisions zu den SVN Revisions gemappt werden. Das passiert immer nach einem fetch. Mit
git update-ref refs/heads/master refs/remotes/git-svn
kann man eine Aktualisierung durchführen.

Leave a Reply