Subversion Tagging Blows
I’ve been reading Subversion documentation lately. For the most part it looks like a good incremental improvement on CVS, and most of the complaints I’d heard about it really turned out to be the of the “it doesn’t work like I’m used to” variety.
However, it does have one really serious deficiency: tags and branches aren’t first-class abstractions.
This means that, among other things, you can’t use a tag name in place of a revision number anywhere. To perform many common branching and merging operations, you are expected to manually grovel through commit logs to find the appropriate revision numbers.
The most maddening thing about second-class branches is that, if you want to merge between them, you’ve got to work out the common ancestor revision yourself and specify it explicitly in the merge. That’s just unacceptable.
Besides all this, it’s inherited CVS’s nasty deficiencies with double-merges between branches.
So, basically with Subversion, you get atomic commits and file/directory renaming, but tags are useless for anything except checkouts, and branches are even harder to work with than in CVS.