But I actually mean … figure out how to do the equivalent of a Mercurial/Git “Pull” on a Subversion branch :( I realize you can do it with a merge, but the process seems to be both messy and unreliable.
We have a whole bunch of branches running these days, and it’s getting messy, not least because Subversion “branches” are part of the repository file system and not part of the revision metadata.
Let me accept some responsibility for this mess up-front: Subversion users are warned in advance that you should plan your repository structure carefully.
This is because subversion doesn’t actually distinguish between branches. Branches are just sub-directories of the overall project that take advantage of the fact that directories provide a means of compartmentalizing different groups of things. In the case of subversion, different groups of branches.
But this leads to a system whereby branches are organized opaquely.
For example, if you decide to create an “update system” branch of /trunk/, you’ll probably create it in /branches/branchname/
But what if you decide to branch this? You can’t put it in /branches/branchname/subbranch because that’s actually part of /branches/branchname’s data content. So you’d need to put it in /branches/branchname2/ or something.
Anyway, the result is we have lots of branches which are beginning to become disorganized, and because the repository structure is mingled with the branch structure, it can be hard to tell where they’re from.
Which means some care has to be employed in merging in changes.
Git and Mercurial provide a very simple “pull” command which fetches new changes to the parent branch into your branch, which makes managing lots of forks/branches much less of a pain. The subversion approach really doesn’t lend itself well to parallel branches, at least not so far as I’ve worked out.
Hence the weekend task.
I’m really starting to think it might be best just to move our source repositories over to Mercurial. I’m just a little dubious about doing it because it’s still less widely deployed than Subversion and I’m really quite nervous about how viable it will be.