Subversion zu Git Migration

Bisher habe ich für einige Projekte Subversion und später auch Git für die Versionierung verwendet. Jetzt wollte ich die Subversion Repositories zu Git migrieren. Wenn Sie diese Beschreibung nutzen, stellen Sie bitte sicher, dass sie keine Daten löschen. Am besten legen Sie zunächst eine Sicherung aller Daten an.

Powershell: Erstellen der authors.txt

Da auf dem Bild oben nicht so richtig viel zu erkennen ist, hier nochmal das Kommando:

svn.exe log −−quiet | ? { $_ −notlike '−∗' } | % { "{0} = {0} <{0}>" −f
($_ −split ' \| ')[1] } | Select −Object −Unique > authors.txt

Das Resultat könnte so aussehen:

Den Inhalt anpassen

Hier habe ich die letzte Zeile zugefügt, damit später das Migrieren sicher klappt.

Das Verzeichnis mit den Dateien (noch mit Subversion) die verschoben werden sollen. Sie sehen, dass das Verzeichnis viele Dateien enthält, die temporär erzeugt werden, also überflüssig sind. Diese sollte man mit gitignore ausschliessen. gitignore ist in dieser Beschreibung allerdings kein Thema.

Quellordner mit Subversion, Git Bash

Damit die Daten migriert werden können, muss man sie aus dem Subversion Repository in ein Git Repository bringen. Das oben gezeigte Verzeichnis wird dafür gar nicht benötigt.

Subversion Repositories auf meinem Haupt – PC

Aus dem obigen Repository wird dann zunächst in ein temporäres Verzeichnis (vorher anlegen) geklont. Dabei wird aus Subversion Git:

Das Migrieren in ein temporäres Verzeichnis aus dem Subversion Repository

Das Ergebnis sieht so aus wie in der folgenden Abbildung. Dieses Verzeichnis („f:\tmp\c#“) habe ich dann einfach wieder in meine Projekte kopiert (Bei mir: e:\Tex\Projekte\c#) und dort zunächst mit dem „Subversion“ Verzeichnis verglichen, da evtl. einige Änderungen noch nicht in Subversion angekommen waren. Dann muss man die „neuen“ Dateien zu Git hinzufügen: git add . und dann git submit. Danach kann man, nach sorgfältiger Prüfung (bei mir hier eine Kompilierung der Tex Dateien) und wenn man sich sicher ist, dass man alle relevanten Dateien erfasst hat das alte (Subversion) Verzeichnis und dann das temporäre Verzeichnis löschen.

Im neue Arbeitsverzeichnis mit dem .git Unterverzeichnis ( Bei mir: e:\Tex\Projekte\c#) öffnet man dann eine Git Bash und fügt einen Remote zu. In diesem Fall benutze ich einen Raspi im lokalen Netz, auf dem ein lokaler Git Server betrieben wird:

Dahin klont man dann das soeben erstellte lokale Verzeichnis:

Das Klonen des Subversion Repositories in ein neues temporäres Verzeichnis mit git Repository

Zukünftige Änderungen werden dann mittels add – commit und push in das Remote Repository übertragen:

Hinweis:

Ich hatte das Problem, dass die ip-Adresse des lokalen Netzes sich geändert hatte. Deshalb musste zunächst der Zugriff für Subversion neu gesetzt werden:

Das gleiche Problem trat aber auch mit den git Repositories auf, die schon vor der ip-Adressenänderung angelegt worden sind. Auch hier muss dann die URL angepasst werden. Dazu wechselt man in das betroffene Verzeichnis, öffnet dort eine Git Bash und führt das folgenden Kommando (natürlich mit passenden Repository, vfl-rastede.git ist nur ein Beispiel) aus: