Migration von Subversion zu Git: Vorbereitungen

Der Transitionsprozess eines Entwicklungsteams von Subversion (SVN) zum verteilten Versionskontrollsystem Git kann in fünf strukturierte Abschnitte aufgebrochen werden. Der erste Schritt bei der Migration eines Projekts von SVN zu Git besteht darin, die lokale Maschine des Migrationsleiters vorzubereiten. In dieser Phase lädt er die geeigneten Utility-Skripte herunter, setzt (falls nötig) ein schreibungsabhängiges Dateisystem auf und mappt die Autoreninformationen von SVN zu Git.

Alle nachfolgenden Schritte sollten wie gesagt auf dem lokalen Rechner des Migrationsleiters stattfinden.

Download der Migrations-Skripte

Git bringt die meisten der erforderlichen Werkzeuge mit, um ein SVN-Repository zu importieren, doch einige wenige Funktionalitäten fehlen. Diese hat Atlassian in Form einer praktischen JAR-Datei zur Verfügung gestellt. Diese Datei mit den Namen svn-migration-scripts.jar ist wichtig für die hier beschriebene Migration und kann aus Atlassians Bitbucket-Account heruntergeladen werden. Diese Anleitung geht davon aus, dass der Migrationsleiter sie in seinem Home-Verzeichnis speichert.

Nach dem Download ist es sinnvoll, die Skripte zu verifizieren, um sicherzustellen, dass die Java-Laufzeitumgebung, Git, Subversion und das git-svn-Utility installiert sind. Dazu wird der folgende Befehl in der Eingabeaufforderung ausgeführt:

java -jar ~/svn-migration-scripts.jar verify

Sind die erforderlichen Programme für den Migrationsprozess nicht vorhanden, wird in der Konsole eine Fehlermeldung ausgegeben. Ehe es weitergehen kann, sollte die fehlende Software also installiert werden.

Läuft die Migration auf einem Rechner mit OS X ab, gibt das System zudem diese Warnung aus:

You appear to be running on a case-insensitive file-system. This is unsupported, and can result in data loss.

Dazu gleich mehr.

Ein schreibungsabhängiges Dateisystem mounten

Die Migration zu Git sollte auf einem schreibungsabhängigen Dateisystem durchgeführt werden, um Beschädigungen des Repositorys zu vermeiden. Das ist problematisch, wenn die Migration auf einem OS X-Rechner laufen soll, da das OS X-Dateisystem nicht schreibungsabhängig ist.

Bei einem anderen Betriebssystem muss der Migrationsleiter auf dem lokalen Rechner lediglich ein Verzeichnis namens ~/GitMigration anlegen, wo die Konvertierung stattfindet. Den nächsten Abschnitt kann er überspringen.

SVN_Git_Migration_4

Mit OS X dagegen muss ein schreibungsabhängiges Disk-Image mit dem Create-Disk-Image-Skript erstellt werden, das in der svn-migration-scripts.jar enthalten ist. Zwei Parameter sind erforderlich:

  1. Die Größe des zu erstellenden Disk-Images in Gigabyte: Das kann jeder beliebige Wert sein, solange er den Umfang des zu migrierenden SVN-Repositorys übersteigt.
  2. Der Name des Disk-Images: In dieser Anleitung wird GitMigration verwendet.

Um ein fünf Gigabyte großes Disk-Image namens GitMigration zu erzeugen, ist beispielsweise dieses Kommando nötig:

java -jar ~/svn-migration-scripts.jar create-disk-image 5 GitMigration

Das Disk-Image wird in das Home-Verzeichnis gemountet. Auf der lokalen Maschine sollte damit nun ein Verzeichnis ~/GitMigration vorhanden sein. Dieses dient als virtuelles schreibungsabhängiges Dateisystem, hier wird das konvertierte Git-Repository gespeichert.

Die Autoreninformationen extrahieren

SVN hält für jede Revision nur den Nutzernamen des Autors fest. Git jedoch speichert den vollen Namen und die E-Mail-Adresse. Das bedeutet, dass der Migrationsleiter eine Textdatei erstellen muss, die die SVN-Usernamen mit ihren Git-Gegenstücken mappt.

SVN_Git_Migration_5

Die folgenden Befehle generieren diese Textdatei automatisch:

cd ~/GitMigration
java -jar ~/svn-migration-scripts.jar authors <svn-repo> authors.txt

Dabei muss <svn-repo> durch die URI des SVN-Repositorys ersetzt werden, die als Quelle dient. Liegt das Repository also beispielsweise unter https://svn.beispiel.com, muss der Befehl so aussehen:

java -jar ~/svn-migration-scripts.jar authors https://svn.beispiel.com > authors.txt

Dadurch wird eine Textdatei namens authors.txt erzeugt, die jeden Autor im SVN-Repository zusammen mit den generierten Namen und E-Mail-Adressen enthält. Dies sollte in etwa so aussehen:

p.schulz = p.schulz <p.schulz@mycompany.com>
h.meier = h.meier <h.meier@mycompany.com>

Nun muss der Migrationsleiter rechts neben den Gleichheitszeichen die Namenskürzel durch die entsprechenden Klarnamen ersetzen und die korrekten E-Mail-Adressen der User spezifizieren:

p.schulz = Paul Schulz <paul@unternehmen.com>
h.meier = Hans Meier <hans@unternehmen.com>

Zusammenfassung

Mit den Migrations-Skripten, dem Disk-Image (bei OS X-Systemen) und den Autoreninformationen sind die Vorbereitungen abgeschlossen. Die SVN-History kann nun in ein neues Git-Repository importiert werden. Wie diese Konvertierung funktioniert, beschreibt der nächste Artikel der Reihe.

Weiterführende Infos: Ihr Partner für Git und Stash

Kennen Sie Stash von Atlassian? Stash bietet eine zentrale Lösung zum Management des gesamten distributierten Codes: Hier kommen alle Git-Repositories im Unternehmen zusammen, hier finden Entwickler immer die letzte offizielle Version eines Projekts, hier können Projektverantwortliche Berechtigungen kontrollieren, um sicherzustellen, dass die richtigen Nutzer Zugriff auf den richtigen Code haben.

Möchten Sie mehr erfahren? Wir sind offizieller Vertriebspartner von Atlassian und einer der größten Atlassian Experts Partner weltweit. Gerne unterstützen wir Sie bei der Evaluierung, Lizenzierung und Adaption von Stash. Und wenn Sie Atlassian-Lizenzen bei //SEIBERT/MEDIA kaufen, gewähren wir Ihnen einen Rabatt in Höhe von 10% der Lizenzkosten in Form von Beratungsleistungen. Bitte sprechen Sie uns einfach an.

Branch-basierte Git-Workflows mit Stash adaptieren
Echte Integration: Das Zusammenspiel von JIRA, Stash und Bamboo
Interview: Die Vorteile von Git in der Software-Entwicklung und die Möglichkeiten von Stash
So funktioniert die Lizenzierung von Atlassian-Produkten