Some notes on migrating between version control systems. WORK IN PROGRESS.
To migrate a Bazaar repository to Git
To convert a bzr repository (repo-bzr) to git:
cd repo-bzr git init && bzr fast-export `pwd` | git fast-import && rm -r .bzr && git reset HEAD
This will take your current working directory, build git history, and destroy bzr history. Do not run this on any important bzr branch, as it will get eaten.
But I wanted a 'bare' repository, for future reasons:
cp -R repo-bzr repo.git cd repo.git git init --base bzr fast-export `pwd` | git fast-import rm -r .bzr git reset HEAD
Try to replay a Git repo into a new Subversion repo
This approach uses SubGit, which is free to use for open source/academic or 'import' applications.
Assume we have a 'bare' Git repository at /path/to/repo.git:
svnadmin create svn-repo subgit configure svn-repo
Edit the svn.repo/conf/subgit.conf file and in section [git "default"], adjust the repository to give repository = /path/to/repo.git. Then,
subgit install svn.repo
This final step is the one that takes the time -- took about 10 minutes for our repository of ~3000 commits. This process was tested with a 'linear' repository -- no branches in the original bzr repository. The resulting svn repository has several 'tags' but no 'branches', as expected.
To recreate a branch in SVN when only the HEAD code from the branch is available
After a server failure, we lost the revision history of several branches in our repository, but because of working copies on other machines, we still had the HEAD revision code.
To recreate a branch and import this old working-copy code (assumed to be located in ~/oldwc), you can use the following steps:
svn cp http://example.com/svn/repo/trunk http://example.com/svn/repo/branches/b1 svn co http://example.com/svn/repo/branches/b1 cd b1 rsync -Cva --delete ~/oldwc/ ./
Then, using a tool such as Meld, open the b1 directory and any files marked 'missing' can be removed (ie svn rm). You can do this easily using Meld, and also quickly review the changes made relative to the trunk code to make sure the rsync process worked correctly. Any unversioned files present in the b1 should also be added (ie svn add) since they were present in the ~/oldwc working copy and should now be included in the new b1 branch.
Once the new files are added and missing files removed, you can complete the process using\
And make a comment to record what has been done.