Migration zu Git Umstellung von Subversion auf Git
Um eine Migration eines gesamten Repositories von Subversion nach Git durchzuführen, zeige ich hier die einzelnen Schritte auf.
Installation von Git
Git muss mit SVN Unterstuetzung installiert werden. Unter Ubuntu/Debian erledigt man das mit:
Unter Mac OS X geht das mit Macports so:
Mit Fedora:
Migration
Zuerst legen wir uns eine Mapping Datei names authors.txt an, mit der wir zu den SVN Benutzernamen den Namen und die Emailadresse zuweisen, welche mit Git verwendet werden soll.
steve = Steve Jobs <you@mydomain.com>
bill = Bill Gates <another@mydomain.com>
Um die Migration zu starten wechselt man in das Verzeichnis, in dem das Git Repository angelegt werden soll. Git wird ein Unterverzeichnis im aktuellen Verzeichnis mit dem gleichen Namen anlegen, wie das SVN Repository heisst:
--stdtlayout zeigt an, dass im SVN Repository trunk, tags und branches vorhanden sind. tags und branches werden als git branches übernommen.
--no-metadata verhindert, dass keine SVN Informationen festgehalten werden (wie z.B. SVN Verweise in den Commit Meldungen)
Um die Ignore-Einstellungen aus dem alten SVN Repository zu übernehmen, verwendet man den nachfolgenden Code. (Dies funktioniert aber nur, wenn nicht --no-metadata verwendet wurde; man sollte sich also vorher überlegen, ob man lieber auf die Meta-Informationen verzichten will oder einen weitere Bezug zum SVN Repository beibehalten will).
Nun macht es Sinn einige Tests anzustellen:
- Ist die History vorhanden? (die wird immer vorhanden sein, aber es ist ein gutes Gefühl sie zu sehen ;))
Dazu ruft man "git log | more" auf und man bekommt die Liste mit den einzelnen Commits angezeigt. Sind die Namen der Autoren richtig zugeordnet? - Welche Branches sind vorhanden?
Mit "git branch -a" bekommt man die Liste der vorhandenen Branches ausgeben.
Da Subversion alle Subversion tags nun "Remote branches" sind, müssen tags nun manuell mit Git gesetzt werden.
Unsere Empfehlung
Nach der Migration
Nach der Migration liegt das alte SVN Repository als lokales Git Repository vor. Will man nun das Repository z.B. auf den zentralen Team Firmenserver hochladen, geht man wie folgt vor:
git push origin master:refs/heads/master
Hat man bei der Migration das Mapping der Benutzernamen vergessen oder man will einfach den Benutzernamen oder eine Emailadresse von allen Commit Messages ändern, kann man das mit filter-branch machen:
if [ "$GIT_AUTHOR_NAME" = "alex" ];
then
GIT_AUTHOR_NAME="Alexander Meindl";
GIT_AUTHOR_EMAIL="meine-email@domain.de";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
Diese Anweisung ist mit Vorsicht zu verwenden, da dadurch auch alle Hash Keys verändert werden (nicht nur von den Commits, bei den der Name/Email geändert wurde).






Schreib doch was dazu