Feel free to ignore the below rant. Revision control is (or at least was for quite some time) one of my pet topics, and I occasionally feel compelled to bore people at parties (or on mailing lists) with a discussion of the subject. I certainly don't mean to compell anyone to switch RCSs a *second* time within a short period, though if a public request for comments would have been made, I might have argued hard for something different.

James Yonan wrote:
I used the cvs2svn tool to convert the repository, so all the previous cvs metadata such as branch tags are still there.

Heh.

As former maintainer of cscvs (a tool which was most often used to import CVS history into GNU Arch), I'm more than a bit interested in just how effective cvs2svn's changeset-generation turns out to be, particularly in corner-cases (temporally overlapping commits or single commits split by a conflict partway through; commits made from systems with incorrect clocks [CVS uses the client's time, rather than the server's]; commits with comments quoting "cvs log" output (rlog doesn't quote user-provided data, so this can make parsing extremely hairy -- though this isn't such an issue if one works off the ,v files, those aren't always available); files implicitly created by CVS on the trunk due to a new addition to a branch; or the many other corner cases exposed by branching which I no longer have a good recollection of.

I'm not particularly fond of svn -- I think it's not nearly ambitious enough[1] and have had DB corruption issues in the past -- but it's certainly a big step up from CVS, and history stored in SVN can be far less ambiguously retrieved.


[1] - Consider that competing next-generation revision control systems offer distributed operation (allowing 3rd parties to start their own branches hosted on their own servers, and allowing easy merging between these various branches[2]); that competing systems offer "cherry-picking", which allows detailed tracking of which specific changesets/patches have been applied on which branches and thus prevents spurious merge attempts; that competing systems, being changeset- rather than snapshot-based, can offer more intelligent merge algorithms... though most of them do have downsides: Arch, for instance, is difficult to learn and has poor win32 support, while Darcs is easy to learn and portable but has serious scalability issues, and several of the others are behind Arch or Darcs in terms of providing the above-mentioned design features and functionality -- though there are some very new systems (such as Git and Mercurial) which have impressive performance characteristics, despite (as before) not having all the functionality (or, in many cases, a design which allows straightforward implementation of all the functionality) of the best-designed distributed SCMs.

[2] - Distributed operation is IMHO a killer feature doing open source development: It means that 3rd parties working on their own patches have revision control tools assisting them both in building the patch and keeping it up-to-date with the maintainer's tools, and providing the same level of support (ie. history of specific changes that went into their patch/branch) that projects done by the maintainer receive. Having worked on a few OSS projects using distributed revision control systems, I find it quite hard to go back.


Reply via email to