How does SVN 1.8 merging compare with DVCS like Git & Mercurial?
I asked a question 3 years ago: How and/or why is merging in Git better than in SVN?
Back then I think we were on SVN 1.6 but now we’ve reached 1.8 and it seems merging is one area they’ve done substantial work on.
So in the light of these changes, has SVN 1.8 caught up with the better merging and branching support in DVCS like git?
SVN 1.8 does seem to have advanced things slightly with ‘reingtegration’ now being an automatic action. You also don’t have to do the dance to keep a branch alive after it’s been merged back any more.
These were real annoyances for me, and it’s good they’re gone.
The thing is SVN merging always seems to have problems with the handling of the mergeinfo records. If you’re not aware, these are properties added to points in the tree when a merge is done. They record which versions are ancestors of the merged version, so that when another merge is done changes in those versions aren’t re-merged.
Unfortunately SVN seems to get confused and I’ve often see it apply changes multiple times. I personally think there’s a fundamental flaw with the way it records what it’s previously merged, but I’ve never been able to work out what’s exactly gone wrong.
Fact is branching and merging were an afterthought and low priority feature for SVN, whereas it’s a fundamental feature of DVCSs. Branching works in SVN, I’ve used it quite heavily. It’s certainly better than some VCS. I don’t think it will ever work quite as well as branching in a DVCS.