Many projects are now contemplating the move from Subversion to a more modern, distributed version control system (VCS) such as Git or Mercurial.
Until recently, the default strategy was to take the whole source repository from the SourceForge site and import it into the rival GitHub site.
Update (February 2013): If you want to automatically mirror commits from an SVN repository to a read-only git repository (e.g. during a git trial phase), see my new blog entry on automatically mirroring SVN to git
SourceForge offers their own comperehensive Git solution now, and there is no imperative reason to abandon SourceForge. The instructions presented here show how to convert the code repository into the SourceForge Git system, but they could just as easily be used to import the project into any Git host (such as GitHub) if that is desired.
dynalogin as an exampleAs an example, we will use the conversion of the dynalogin project.
mkdir ~/dynalogin-conversion
cd ~/dynalogin-conversion
svn checkout \
https://dynalogin.svn.sourceforge.net/svnroot/dynalogin dynalogin-svn-full
cd dynalogin-svn-full
svn log -q | \
awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' \
| sort -u > ~/dynalogin-conversion/authors-transform.txt
cd ~/dynalogin-conversion/
vi authors-transform.txt
d_pocock = Daniel Pocock <daniel@pocock.com.au>
Please see other blog entry for convenient scripts to help generate authors.txt - it is really important to get this right the first time because it is extremely disruptive to change it later after your repository is public.
git and the optional component git-svnmkdir ~/dynalogin-conversion
cd ~/dynalogin-conversion
git svn clone \
https://dynalogin.svn.sourceforge.net/svnroot/dynalogin \
--no-metadata \
-A ~/dynalogin-conversion/authors-transform.txt \
--stdlayout \
dynalogin-git-tmp
mkdir ~/dynalogin-conversion/dynalogin.git
cd ~/dynalogin-conversion/dynalogin.git/
git init --bare .
git symbolic-ref HEAD refs/heads/trunk
cd ~/dynalogin-conversion/dynalogin-git-tmp
git remote add bare ~/dynalogin-conversion/dynalogin.git
git config remote.bare.push 'refs/remotes/*:refs/heads/*'
git push bare
cd ~/dynalogin-conversion/dynalogin.git/
git branch -m trunk master
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
git remote add origin ssh://d_pocock@dynalogin.git.sourceforge.net/gitroot/dynalogin/dynalogin
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
git push --tags origin master
You can now use the SourceForge git browser to inspect the results and verify that your project was migrated.
Once complete, it is a good idea to completely disable SVN access to your project to ensure no developers submit code to the wrong repository. SourceForge does not attempt to synchronize commits across their SVN and Git repositories in any way.