Open Source for many developers means getting the hands dirty in many projects simultaneously sending patches here and there as they polish their own way through the code to make sure the bug encountered today will not pester anyone in the future. Everybody seems to be interested in reporting the bugs and sharing patches, but in reality it doesn't happen too often, mostly because of lack of time necessary to contribute. Following modern enterprise tendency to define various measures and estimates let me call this parameter as Time-To-Contribute value. TTC is directly influenced by such factors as
activity of developers and
availability of the code as well as
usability and
knowledge of development tools.
It would be interesting to get deep into the details of code contributions, but to keep the long story short and justify the title let's compare SVN and CVS. These tools provide access to source code and poor decision may affect developers experience and desire to contribute in the future. This post based on
RFC submitted to
PHPDOC community a year ago, which may be useful for other conservative CVS parties out there like
MinGW Facts only.
++++ Accessibility:
CVS usually blocked by proxies (needs dedicated port)
SVN works over HTTP and HTTPS via WebDAVCVS doesn't work behind a proxy
SVN works with proxiesCVS checkout is complicated, it is hard to remember all the prerequisites
cvs -d :pserver:cvsread@cvs.php.net:/repository login
cvs -z3 -d :pserver:cvsread@cvs.php.net:/repository checkout -P phpdoc
SVN project checkout command is easy to remembersvn co
http://svn.php.net/repository/phpdocCVS is complicated to learn
SVN has a perfect bookCVS is abandoned by developers
SVN is supported++++ Security:
CVS password is transmitted over network in cleartext with simple rot13-like translation
SVN works over HTTPS, supports Apache authentication schemes++++ Usability:
Command set is mostly the same
CVS fetches previous revision online to build diff of changes
SVN builds diff offlineCVS takes twice less disk spaceSVN stores full copies of checked out files for comparison
CVS screws linefeeds
SVN doesn't screw linefeedsCVS is file based - history is separated for each file
SVN is atomic - modification of group of files is a wholeCVS maintains independent revision numbers for each file
SVN revisions are global for repository
CVS leaves deleted directories in repository tree
SVN keeps directory tree tidyCVS has convenient concept of branches/tagsSVN branches/tags are just directory copies in repository
CVS branches/tags concept is complicated
SVN branches/tags are easy to understandI think that for the most of us the choice is rather obvious if there are no practice to use $Id$ to track how many changes a file underwent since last time, or if people are not too addicted to CVS branches. Nevertheless there are still many projects that use CVS and the true reasons why people do this are: old habits, absence of time to learn something new and dependencies on CVS in hard-coded legacy scripts. Of course, laziness is also a reason and it's funny that this laziness sometimes pushes to seek more convenient tools.