bzr/svn to git

Bei mir herrschte bis vor kurzem noch ein heilloses Kunterbunt was die Versionierungstools anging.
Deshalb habe ich mich nun einmal ran gesetzt und meine subversion und bzr-Projekte konvertiert.

bzr

bzr zu konvertieren ist eigentlich sehr einfach mit dem fast-import tool

sudo aptitude install bzr-fastimport

Mit diesem Tool (in Kombination mit git-fast-import) genügt es eigentlich nen neuen Ordner für das git-archiv zu erstellen

mkdir project_git && cd project_git && git init

und dann mittels fast-export/fast-import die metadaten importieren:

bzr fast-export –plain ../project | git fast-import

Bei mir kam es teilweise zu Fehlern wegen ungültiger Tag-/Versions-namen (bzr ist dort anscheinend offener) wegen zb. Leerzeichen oder ähnlichem. Aber auch das ist nur ein kleines PRoblem, so kann man einfach mittels sed direkt in der Pipe den Problematischen Namen ersetzen:

bzr fast-export –plain ../project | sed s/some\ odd\ tagname/oddtagname/ | git fast-import

Nach erfolgreichem Abschliessen des Imports noch einmal

git checkout

und wir haben unser Projekt migriert 🙂

svn

Für subversion gibt es auch ein geeignetes Tool: git-svn

sudo aptitude install git-svn

Mit diesem lassen sich svn-Projekt direkt integrieren:

mkdir project_svn && cd project_svn

git svn init https://svn.funny.server –no-metadata –username=svnusername

Zudem brauchen wir noch ein sogenanntes Autherfile, da im git ja doch mehr Informationen zu einem Nutzer gespeichert sind:

git config svn.authorsfile ~/Desktop/users.txt

Erstellen können wir dieses zb. mit folgendem Skript:

#!/usr/bin/env bash
authors=$(svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq)
for author in ${authors}; do
echo "${author} = NAME ";
done

welches uns alle beteiligten Autoren ausliest.

Zuletzt kann mittels

git svn fetch

das Projekt ausgecheckt werden. (Es soll auch der umgekehrte Weg (dpush) funktionieren, jedoch habe ich das nicht ausprobiert)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.