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-svn
mkdir ~/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.