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
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 git@scm.domain.tld: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 git@gitlab.domain.tld: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.