Migration von Repos von SVN nach GIT

Nachdem nun GitLab funktioniert muss der Git-Server gefüllt werden. Dazu gibts die fantastische GIT-SVN-Bridge. Aber bevor es richtig los geht, sollte bisschen Vorgeplänkel gelesen werden. Dann gehts ans Eingemachte..

Migrations-Tool git-svn installieren

Install git-svn auf Mac Ports

sudo port install git +svn

Install auf Ubuntu 10.04

sudo apt-get install git-svn

Arbeitsliste erstellen

Liste aller SVN-Repos

svn list -v svn://localhost/

Liste aller Branches eines Repos

svn list -v svn://localhost/Projektname

zeigt branches, trunk etc…

svn list -v svn://localhost/Projektname/trunk

zeigt Dateien im trunk

Migration selbst

Nun gehts immer schön der offiziellen Anleitung entlang.

Zunächst das vorhandene SVN Repo ins Git clonen und auschecken

git svn clone svn://localhost/Projektname -T trunk -b branches -t tags

Dann prüfen ob die Branches ordnungsgemäß angelegt wurden

git branch -a

Dann die Branches korrigieren. also remotes/origin/trunk zu /origin/trunk (oder besser master)

cp -Rf .git/refs/remotes/* .git/refs/heads/
rm -Rf .git/refs/remotes

bzw. wenn die Branches remotes/origin/* lauten..

cp -Rf .git/refs/remotes/origin/* .git/refs/heads/
rm -Rf .git/refs/remotes/origin

Dann im GitLab ein neues Projekt und ggf. Gruppe anlegen. Vermutlich muss dann noch einmalig überhaupt der SSH-Key hinzugefügt werden. Also

ssh-keygen -t rsa -C "[deine email]"

und den Inhalt von ~/.ssh/.id_rsa.pub im eigenen GitLab eintragen https://gitlab.domain.tld/profile/keys/

Dann das Projekt im lokal ausgecheckten Verzeichnis anmelden

git remote add origin :Projektname/projektname.git

Und nun der finale Push von allen Branches

git push origin --all

Falls Fehler gemeldet werden, dass im Branch remote noch neuere Änderungen vorhanden sind, weil das Repo schon erstellt war o.ä., dann

git merge origin/master

und anschließend der push

Migration hornalter CVS-Repos

Zunächst muss das CVSROOT-Verzeichnis festgelegt werden, sofern nicht geschehen

export CVSROOT=/CVSROOT

Dann der Migrationsbefehl:

git cvsimport -a -p x -v -C projektname Projektname

projektname = Verzeichnis mit neuem lokalem git-Repo
Projektname = CVS-Modulname

Falls Fehler „.. unexpected ‚\x0‘ reading revision number in RCS ..“ auftritt, hilft tr -d '', also wenn z.B. CVSROOT/meinprojekt/datei.txt,v kaputt ist, dann

tr -d '\0' < CVSROOT/meinprojekt/datei.txt,v > CVSROOT/meinprojekt/datei.txt,v

Das GIT-Projekt anmelden

git remote add origin :dein/projekt.git

Schauen welche Braches aktiv sind – dürfte master & origin sein.

git branch -a

Und ins Remote-Git pushen

git push origin -a

Fazit

Nach 3 Tagen Arbeit sind 21 Repositories umgezogen, wobei manche aus CVS-Altbeständen stammen und einige noch gar nicht verwaltet waren. Na ich will mal nicht mit informationslosen Zeuch langweilen. Bleibt festzustellen: die Arbeit hat sich gelohnt und GIT ist ein zuverlässiges, wenn auch anfangs nicht leicht verständlich ob der Vielfalt der Möglichkeiten und des verteilten Workflows.