I recently had some Subversion fun when I decided my organization needed to upgrade from Subversion 1.4 to 1.6. Since the release of 1.4 there have been monumental advances in disk storage and merging capabilities. We “branch for feature” off the trunk (which is also in development), and need to merge back into the trunk after the branch is released. Subversion 1.6 has what is called a “Reintegration Merge” which is used to prevent reflective merging indicative of this type of workflow.
I decided I did not want to simply upgrade the svn binaries and then update the repository since this would not get me the new storage optimizations. I opted instead to create a new 1.6 server and sync the old 1.4 repo to the new 1.6 repo using svnsync. This would allow me to keep all the revision history and revision properties, but it would also commit each revision into the new repo which would allow 1.6 to do its storage optimization.
The second part of my mission was to break off 3 projects into their own repository. Our code was all stored in one repository over on the 1.4 server, and I wanted to break it up and allow the different groups have their own repos.