Close

Git convert: A step in migration from SVN to Git

Der nächste Schritt bei der Migration vom SVN zu Git ist der Import der Inhalte des SVN-Repository in ein neues Git-Repository. Wir machen das mit dem Dienstprogramm git svn, das bei den meisten Git-Distributionen inbegriffen ist und dann reinigen wir die Ergebnisse mit svn-migration-scripts.jar.

Beachte, dass der Konvertierungsprozess für größere Repositorys sehr viel Zeit in Anspruch nehmen kann, auch wenn von einem lokalen SVN-Repository geklont wird. Als Anhaltspunkt: Die Konvertierung eines 400 MB Repositorys mit 33.000 Commits auf dem Main-Branch dauerte rund 12 Stunden.

Für angemessen große Repositorys sollten die folgenden Schritte auf dem lokalen Computer des Migration Lead ausgeführt werden. Wenn du jedoch ein sehr großes SVN-Repository hast und die Konvertierungszeit reduzieren willst, kannst du git svn clone auf dem SVN-Server ausführen, anstatt auf dem lokalen Rechner des Migration Lead. Damit wird der Mehraufwand des Klonens über eine Netzwerkverbindung vermieden.


Das SVN-Repository klonen


Der Befehl git svn clone transformiert Trunk, Branches und Tags in deinem SVN-Repository in ein neues Git-Repository. Je nach der Struktur deines SVN-Repository muss der Befehl unterschiedlich konfiguriert werden.

Git-Migration: Klonbefehl git svn
Datenbanken
Zugehöriges Material

Verschieben eines vollständigen Git-Repositorys

Bitbucket-Logo
Lösung anzeigen

Git kennenlernen mit Bitbucket Cloud

Standard SVN-Layouts

Wenn bei deinem SVN-Projekt das standardmäßige /Trunk, /Branchesund /Tags Verzeichnis-Layout verwendet wird, kannst du die Option --stdlayout verwenden, anstatt die Struktur des Repository manuell anzugeben. Führe den folgenden Befehl im Verzeichnis ~/GitMigration Directory aus:

git svn clone --stdlayout --authors-file=authors.txt
 <svn-repo>/<project> <git-repo-name>

Dabei ist die URI des SVN-Repositorys, zu dem du migrieren willst, und der Name des Projekts, das du importieren willst, und der Name des Verzeichnis des neuen Git-Repositorys.

Wenn du beispielsweise ein Projekt namens Confluence migrieren willst, das auf https://svn.atlassian.comgehostet wird, kannst du Folgendes ausführen:

git svn clone --stdlayout --authors-file=authors.txt https://svn.atlassian.com/Confluence ConfluenceAsGit

Nicht standardmäßige SVN-Layouts

Wenn dein SVN-Repository kein Standardlayout hat, musst du den Standort des Trunks, der Branches und Tags angeben und dafür die Befehlszeilenoptionen --trunk, --branchesund --tags verwenden. Wenn du beispielsweise Branches sowohl im Verzeichnis /branches und den /bugfixes Verzeichnissen gespeichert hast, würdest du den folgenden Befehl verwenden:

git svn clone --trunk=/trunk --branches=/branches 
 --branches=/bugfixes --tags=/tags --authors-file=authors.txt 
 <svn-repo>/<project> <git-repo-name>

Das neue Git-Verzeichnis überpüfen


Wenn git svn clone abgeschlossen ist (das kann eine Weile dauern), findest du ein neues Verzeichnis mit der Bezeichnung in ~/GitMigration. Das ist das konvertierte Git-Repository. Du solltest zu wechseln und jeden der Standard-Git-Befehle ausführen können, um dein Projekt zu erkunden.

Branches und Tags werden erwartungegemäß nicht in das neue Git-Repository importiert. Du wirst keine der SVN-Branches in git branch finden oder deine SVN-Tags in git tag . Wenn du aber git branch -r ausführst,findest du alle Branches und Tags von deinem SVN-Repository. Der Befehl git svn clone importiert deine SVN-Branches als Remote Branches und importiert deine SVN-Tags als Remote Branches, die über das Präfix tags/verfügen.

Git-Migration: Struktur eines geklonten Git-Repository

Dieses Verhalten macht bestimmte bidirektionale Synchronisierungsverfahren leichter, aber es kann sehr verwirrend sein, wenn versucht wird, ein monodirektionales Migration Git zu erstellen. Daher besteht unser nächster Schritt darin, diese remote Branches in lokale Branches und tatsächliche Git-Tags zu konvertieren.

Das neue Git-Repository reinigen


Das Skript clean-git, das in svn-migration-scripts.jarenthalten ist,konvertiert die SVN-Branches zu lokalen Git-Branches und die SVN-Tags in richtige Git-Tags. Bitte beachten, dass dies ein destruktiver Vorgang ist und du keine Commits vom Git-Repository zurück in das SVN-Repository bringen kannst.

Wenn du diese Migrationsanleitung befolgst, ist das kein Problem, da eine monodirektionale Synchronisierung von SVN zu Git bevorzugt wird (das Git-Repository gilt bis nach dem Migrate -Schritt als schreibgeschützt). Wenn du jedoch vorhast, dich auf das Git-Repository und das SVN-Repository während des Migrationprozesses festzulegen, solltest du die folgenden Befehle nicht ausführen. Das ist eine fortgeschrittene Aufgabe, die für normale Projekte nicht empfohlen wird.

Um zu sehen, was gereinigt werden kann, den folgenden Befehl ~/GitMigration/ausführen in:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git

Das gibt alle vom Skript geforderten Änderungen aus, führt jedoch keine davon aus. Um diese Änderungen auszuführen, musst du die Option --force verwenden und zwar so:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force

Jetzt solltest du alle SVN-Branches unter git branch sowie die SVN-Tags unter git tag sehen. Das bedeutet, dass dein SVN-Projekt erfolgreich in ein Git-Repository konvertiert wurde.

Zusammenfassung


In diesem Schritt hast du ein SVN-Repository mit dem Befehl git svn clone in ein neues Git-Repository konvertiert und dann die Struktur des erhaltenen Repository mit svn-migration-scripts.jarbereinigt. Im nächsten Schritt lernst du, wie dieses neue Git-Repository mit allen neuen Commits im SVN-Repository in synchronisiertem Status gehalten wird. Dieses Verfahren ist mit der Konvertierung vergleichbar, aber es gibt ein paar wichtige Workflow-Aspekte in dieser Übergangsphase.


Diesen Artikel teilen
Nächstes Thema

Lesenswert

Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.

Mitarbeiter arbeiten mit unzähligen Tools zusammen

Bitbucket-Blog

Abbildung: DevOps

DevOps-Lernpfad

Demo Den: Feature-Demos mit Atlassian-Experten

So funktioniert Bitbucket Cloud mit Atlassian Open DevOps

Melde dich für unseren DevOps-Newsletter an

Thank you for signing up