#!/bin/bash # Reference: written following http://john.albin.net/git/convert-subversion-to-git SOFTWARE=$1 if [ -z $SOFTWARE ]; then echo "Missing software to convert..." exit 1 fi skiprevisions= skiprevisionsx="$2" if [ -n "$skiprevisionsx" ]; then for rev in $skiprevisionsx; do rev=$(echo $rev | sed 's/r//g') rev=$(( $rev + 0 )) if [ $rev -gt 0 ]; then skiprevisions="$skiprevisions $rev" fi done fi # STEP 2: Import in git STDLAYOUT=--stdlayout if [ "$(svn ls http://svn.mandriva.com/svn/soft/$SOFTWARE/trunk 2>/dev/null | wc -l)" == "0" ]; then STDLAYOUT= fi git svn init http://svn.mandriva.com/svn/soft/$SOFTWARE --no-metadata $STDLAYOUT temp cd temp revision=0 if [ -n "$skiprevisions" ]; then for rev in $skiprevisions; do git svn fetch -A ../authors-transform.txt -r $(( $revision + 1 )):$(( $rev - 1 )) revision=$rev done fi git svn fetch -A ../authors-transform.txt -r $(( $revision + 1 )):HEAD git reset --hard trunk cd .. # STEP 3: Convert svn:ignore properties to .git ignore cd temp git svn show-ignore > .gitignore git add .gitignore git commit -m 'Convert svn:ignore properties to .gitignore.' cd .. # STEP 4: Create a bare repository git init --bare new-bare.git cd new-bare.git git symbolic-ref HEAD refs/heads/trunk cd .. cd temp git remote add bare ../new-bare.git git config remote.bare.push 'refs/remotes/*:refs/heads/*' git push bare cd .. # STEP 5: Rename trunk to master cd new-bare.git git branch -m trunk master cd .. # STEP 6: Cleanup branches and tags cd new-bare.git git for-each-ref --format='%(refname)' refs/heads/tags | cut -d / -f 4 | while read ref do git tag "$ref" "refs/heads/tags/$ref"; git branch -D "tags/$ref"; done cd .. mkdir -p $SOFTWARE.git rmdir $SOFTWARE.git mv new-bare.git $SOFTWARE.git # CLEANUP mkdir -p $SOFTWARE-origin rmdir $SOFTWARE-origin mv temp $SOFTWARE-origin exit 0