Skip to content

Subversion Projekt zu Bitbucket (Git) migrieren

Als erstes gehen wir auf Bitbucket tuxnet24 und erstellen im tuxnet24 Workspace ein neues leeres Repository. Dann werden wir unser gewünschtes Subversion Repository auschecken, so das wir dieses lokal auf dem Rechner haben.

root:~# cd tmp/
root:~/tmp# svn checkout --username <USERNAME> http://svn.feuerstein.com/operations-01

Für die Migration von Subversion zu Git benötigen wir das Programm svn2git, was wir erst installieren müssen.

root:~/tmp# apt-get update && apt-get install svn2git

Dann erstellen wir eine Autor Datei. Dazu gehen wir in das ausgecheckte Subversion Repository und listen alle Benutzer mit svn log auf.

root:~/tmp# cd operations-01/
root:~/tmp/operations-01# svn log --quiet | grep -E "r[0-9]+ \| .+ \|" | cut -d'|' -f2 | sed 's/ //g' | sort | uniq >../authors.txt

Dies erzeugt nur eine Liste mit Usernamen. Diese müssen wie folgt angepasst werden. Aus ffeuerstein sollte dann in einer Zeile ffeuerstein = Fred Feuerstein info@feuerstein.com stehen. Hier ein Beispielauszug.

root:~/tmp/operations-01# cat ../authors.txt
ffeuerstein = Fred Feuerstein <info@feuerstein.com>
(keinAutor) = Unkown User <nobody@feuerstein.com>
....

Jetzt wird es Zeit, dass wir ein Git Repository lokal erstellen. Dies sollte den selben Namen haben, wie das was wir im Bitbucket erstellt haben. In unserem Fall operations. Wir erstellen uns dazu ein Verzeichnis operations und führen darin git init aus.

root:~/tmp/operations-001# cd ..
root:~/tmp# mkdir operations && cd operations/
root:~/tmp/operations# git init

Nun mit svn2git das Subversion Repository in eine Git umwandeln. Mit der Option --exclude lassen sich Verzeichnisse ausschließen. Diese werden nicht in das Git Repository aufgenommen.

root:~/tmp/operations# svn2git http://svn.feuerstein.com/operations-001/trunk/web --authors /root/tmp/authors.txt --exclude 'jnh|pom.xml|webservices|zk-common' --notrunk --nobranches --notags

Dann setzen wir den Brach wie folgt.

root:~/tmp/operations# git branch --set-upstream-to=origin/master master

Dann setzen wir das Remote Repository wie folgt.

root:~/tmp/operations# git remote add origin git@bitbucket.org:tuxnet24/operations.git

Als letzten Schritt, pushen wir das Repository auf dem Remote Server.

root:~/tmp/operations# git push -u origin master

Kleiner Tipp

Vielleicht ist es besser vor dieser Aktion zu prüfen, mit welcher Identität man unterwegs ist. Das kann man mit folgenden Befehl machen.

root:~# git config --list
user.name=Fred Feuerstein
user.email=info@feuerstein.com
http.sslverify=false