Full Disclosure: I work with Larf and I will tell him not to mark my answer as selected so that it doesn't look like we set this up somehow to game the system. I'd of course love your upvotes :)
We recently tried something at work that might have sped things up and I wanted to capture it on Stack Overflow. I'm not sure if it will work for you, but it looks like it's working for us.
The Background
- Our repository was originally a 1.4 server.
- It was dumped and reloaded into a 1.5 server
- During the dump and load, a master repository of the form /svn/Projects/Project[A|B|C] was moved to many smaller repositories /svn/projectA , /svn/projectB
More Symptoms
- 'svn merge' likes to take random files and change properties. We had a folder of test scripts (100 or so of them) and for some reason 3-5 of them randomly had properties changed (prop was svn:mergeinfo).
- The apache logs showed propgets and history inquiries for /svn/Projects/ProjectA when doing a merge, despite the fact that the dir structure and name change happened long ago.
- Looking at the svn:mergeinfo on some projects showed some bizarro things: some files that had been around forever showed 'tags' ancestors for some tags but not all, some of them had ancestors for the original svn paths AND the new paths, sometimes 5+ paths and repository layouts.
- I noticed that another employee who used TortoiseSVN (I use OSX commandline) was checking the "ignore ancestors" box and his merges had "correct" apache logs as compared to mine. His merges also appeared to start quicker.
While all of these may be completely normal, they certainly didn't sound like what I had expected.
What We Did
- Tried to move as many large, relatively static, binary files out of the main code folders. This way, dev branches do not need to clone them.
- Removed the svn:mergeinfo property off of EVERY file. We wrote a shell script to do this and let it run.
The Aftermath
Larf had created a dev branch and then after a few days tried to merge the trunk into his branch. Previously, this type of merge appeared to stall for 13+ minutes before starting the merge. Now, it started almost immediately and ran to completion in < 4 minutes.
We may have shot ourselves in the foot in terms of merging code to other older branches (because we removed svn:mergeinfo), but that happens so infrequently we were willing to take the risk of improving the dev branch merge time (and all branches going forward). Also, we are currently doing monthly releases/branches so the next one will have correct svn:mergeinfo properties set on them.