GIT repository konvertálása SVN-re

egyszerű esetekben

A GIT a legnépszerűbb verziókezelők egyike, mégis lehetnek olyan esetek, amikor inkább egy másik szoftvert választunk e célra - jelen esetben a Subversion-ra.

Próbáltam néhány leírást a konverzióról, de egy öszvér-megoldás segítségével sikerült megoldani. A lépések:

svnadmin create $SVNDIR
svn mkdir file://$SVNDIR/{trunk,branches,tags} -m 'git import'
git svn clone file://$SVNDIR --stdlayout
cd $NEWDIR
git remote add origin $GITREPO
git fetch origin
git checkout -b old_master origin/master
git rebase --onto master --root
git svn dcommit

# ha valami nem létezik
git filter-branch --index-filter 'git rm  --cached --ignore-unmatch path/to/the/formerly/misbehaving/module'
git svn dcommit

Ezzel a módszerrel néhány GIT-repót sikerült SVN-re konvertálni.

Források: sandrotosi.blogspot és stackoverflow válasz

Hasznos lehet a commit-ok idejének (timestamp) megőrzése is. Ha egyszerű a git-tároló, viszonylag egyszerűen megoldható:

TMPDIR=$(mktmp -d)

mkdir -p ${TMPDIR}
git clone ${GITREPO} ${TMPDIR}/git
svn checkout ${SVNDIR} ${TMPDIR}/svn

cd ${TMPDIR}/git
# az r1 a git importálás, ezért kezdünk 2-nél
rev=2
git log --reverse --date=iso-strict | sed -n '/Date:/ s,Date: *\(.*\)+..:..,\1.000000Z,p' | while read line; do
  svn propset -r${rev} --revprop svn:date "${line}" ${TMPDIR}/svn
  rev=$((rev+1))
done

rm -rf ${TMPDIR}