<p>My company is using CVS as our de-facto standard for source control. However, I've heard a lot of people say that SVN is better.</p>

<p>I know SVN is newer, but other than that, I'm unfamiliar with its benefits.</p>

<p>What I'm looking for is a good, succinct comparison of the two systems, noting any advantages or disadvantages of each in a Java/Eclipse development environment.</p>

[{'answer_id': 1264, 'author': 'Michael Stum', 'author_id': 91, 'author_profile': 'https://Stackoverflow.com/users/91', 'pm_score': 4, 'selected': False, 'text': '<p>One of the many comparisons:</p>\n\n<p><a href="http://wiki.scummvm.org/index.php/CVS_vs_SVN" rel="noreferrer">http://wiki.scummvm.org/index.php/CVS_vs_SVN</a></p>\n\n<p>Now this is very specific to that project, but a lot of stuff apllies in general.</p>\n\n<p>Pro Subversion:</p>\n\n<blockquote>\n  <ul>\n  <li>Support for versioned renames/moves (impossible with CVS): Fingolfin, Ender</li>\n  <li>Supports directories natively: It\'s possible to remove them, and they are versioned: Fingolfin, Ender</li>\n  <li>File properties are versioned; no more "executable bit" hell: Fingolfin</li>\n  <li>Overall revision number makes build versioning and regression testing much easier: Ender, Fingolfin</li>\n  <li>Atomic commits: Fingolfin</li>\n  <li>Intuitive (directory-based) branching and tagging: Fingolfin</li>\n  <li>Easier hook scripts (pre/post commit, etc): SumthinWicked (I use it for Doxygen after commits)</li>\n  <li>Prevents accidental committing of conflicted files: Salty-horse, Fingolfin</li>\n  <li>Support for custom \'diff\' command: Fingolfin</li>\n  <li>Offline diffs, and they\'re instant: sev </li>\n  </ul>\n</blockquote>\n'}, {'answer_id': 1269, 'author': 'Mat', 'author_id': 48, 'author_profile': 'https://Stackoverflow.com/users/48', 'pm_score': 3, 'selected': False, 'text': '<p>The Subversion book has <a href="http://svnbook.red-bean.com/en/1.4/svn.forcvs.html" rel="noreferrer">an appendix</a> that details important differences from CVS, which may help you make your decision.  The two approaches are more or less the same idea but SVN was specifically designed to fix long standing flaws in CVS so, in theory at least, SVN will always be the better choice.</p>\n'}, {'answer_id': 1272, 'author': 'Vincent Robert', 'author_id': 268, 'author_profile': 'https://Stackoverflow.com/users/268', 'pm_score': 7, 'selected': True, 'text': '<p>CVS only tracks modification on a file-by-file basis, while SVN tracks a whole commit as a new revision, which means that it is easier to follow the history of your project. Add the fact that all modern source control software use the concept of revision so it is far easier to migrate from SVN than it is from CVS.</p>\n<p>There is also the atomic commit problem. While I only encountered it once, it is possible that 2 people committing together in CVS can conflict each other, losing some data and putting your client in an inconsistent state. When detected early, these problems are not major because your data is still out there somewhere, but it can be a pain in a stressful environment.</p>\n<p>And finally, not many tools are developed around CVS anymore. While the new and shiny-new tools like Git or Mercurial definitely lack tools yet, SVN has a pretty large application base on any system.</p>\n<p><strong>EDIT 2020</strong>: Seriously, this answer is 12 years old now. Forget SVN, go use Git like everyone else!</p>\n'}, {'answer_id': 1278, 'author': 'lubos hasko', 'author_id': 275, 'author_profile': 'https://Stackoverflow.com/users/275', 'pm_score': 4, 'selected': False, 'text': "<p>SVN has 3 main advantages over CVS</p>\n\n<ul>\n<li>it's faster</li>\n<li>supports versioning of binary files</li>\n<li>and adds transactional commit (all or nothing)</li>\n</ul>\n"}, {'answer_id': 4102, 'author': 'Lily Ballard', 'author_id': 582, 'author_profile': 'https://Stackoverflow.com/users/582', 'pm_score': 1, 'selected': False, 'text': '<p>You should take a look at <a href="http://git-scm.com" rel="nofollow noreferrer">Git</a> instead of SVN. It\'s a DVCS that\'s blazing-fast and very powerful. It\'s not as user-friendly as SVN, but it\'s improving in that regard, and it\'s not <em>that</em> hard to learn.</p>\n'}, {'answer_id': 14860, 'author': 'David Sykes', 'author_id': 259, 'author_profile': 'https://Stackoverflow.com/users/259', 'pm_score': 2, 'selected': False, 'text': '<p>btw: CVSNT supports atomic commits</p>\n'}, {'answer_id': 14919, 'author': 'Steven Dick', 'author_id': 1809, 'author_profile': 'https://Stackoverflow.com/users/1809', 'pm_score': 2, 'selected': False, 'text': '<p>I\'ll second Eridius\' suggestion of Git, but I\'d expand it to the other DRCS (Distributed Revision Control System) such as <a href="http://www.selenic.com/mercurial/wiki/" rel="nofollow noreferrer">Mercurial</a> and <a href="http://bazaar-vcs.org/" rel="nofollow noreferrer">bazaar</a>.</p>\n\n<p>These products are fairly recent and the level of tooling and integration with them seems low at the moment (based on my initial research).  I\'d say they were best suited to the power-developers out there (and on here ;-)).</p>\n\n<p>On the other hand, what <strong>doesn\'t</strong> CVS currently do for you?  From your initial question, you don\'t really have any, "CVS sucks at this, what could I use instead?"</p>\n\n<p>You\'ve gotta weigh up the costs of any potential migration against the benefits.  For an existing project, I think that it would be hard to justify.</p>\n'}, {'answer_id': 14952, 'author': 'engtech', 'author_id': 175, 'author_profile': 'https://Stackoverflow.com/users/175', 'pm_score': 2, 'selected': False, 'text': '<p>One thing not to overlook is ecosystem. I was working at a CVSNT shop, and I was finding more and more open source tools supported SubVersion by default.</p>\n'}, {'answer_id': 44289, 'author': 'Kris Erickson', 'author_id': 3798, 'author_profile': 'https://Stackoverflow.com/users/3798', 'pm_score': 2, 'selected': False, 'text': '<p>As someone who is in the middle of switching between CVS and SVN (initially we switched all of our projects with cvs2svn and then decided that we would transition by only using svn on new projects), here are some of the problems we have had.</p>\n\n<ul>\n<li>Merging and branching are very different, and if you branch and merge frequently, unless you have SVN 1.5 running on your server have to know when you branched (this isn\'t very clear in the Tortoise SVN dialogs).  Michael says the branching and merging is intuitive, I would argue that after using CVS for 10 years, it is not.</li>\n<li>If your are running the SVN server on Linux, it may be hard to get your SA to move to svn 1.5, as the default install 1.4.x.</li>\n<li>Merging conflicts is not nearly as easy or as clear (at least to me and my co-workers) in TortoiseSVN as it is in TortoiseCVS.  The three pane approach takes some getting used to and the WinMerge (my preferred merge tool) doesn\'t do a three pane merge.</li>\n<li>Beware: many of the online tutorials and magazine articles I have read obviously don\'t branch and merge, you should set up your main repository as <a href="https://svn.yoursvnserver.com/repos/YourProject/Trunk" rel="nofollow noreferrer">https://svn.yoursvnserver.com/repos/YourProject/Trunk</a> and branches on <a href="https://svn.yoursvnserver.com/repos/YourProject/Branches/BranchX" rel="nofollow noreferrer">https://svn.yoursvnserver.com/repos/YourProject/Branches/BranchX</a> .  You can clean up if you start your repos in the wrong place, but it leads to confusion.</li>\n</ul>\n'}, {'answer_id': 183612, 'author': 'webwesen', 'author_id': 7229, 'author_profile': 'https://Stackoverflow.com/users/7229', 'pm_score': 0, 'selected': False, 'text': '<p>you might also choose to migrate only the latest code from CVS into SVN and freeze your current CVS repo. this will make migration easier and you might also build your legacy releases in the old CVS repo.</p>\n'}, {'answer_id': 39558442, 'author': 'richie', 'author_id': 6845541, 'author_profile': 'https://Stackoverflow.com/users/6845541', 'pm_score': 0, 'selected': False, 'text': "<p>Well, a few things which i feel makes svn awesome.</p>\n\n<ol>\n<li>The SVN-Altassian crucible combination is a far superior method of reviews and quality checks</li>\n<li>Better management of conflicts and merges</li>\n<li>It's obviously faster for taking checkouts, performing commits, etc.</li>\n<li>The atomic commit problem - It is possible that 2 people committing together in CVS can conflict each other, losing some data and putting your code base in an inconsistent state </li>\n</ol>\n\n<p>Migration can easily be done in a few hours using cvs2svn.</p>\n"}, {'answer_id': 51375418, 'author': 'vidy', 'author_id': 9993935, 'author_profile': 'https://Stackoverflow.com/users/9993935', 'pm_score': 1, 'selected': False, 'text': '<p>CVS (Concurrent Versions System) and SVN (SubVersioN) are two version control file systems that are popularly used by teams who are collaborating on a single project. These systems allow the collaborators to keep track of the changes that are made and know who is developing which and whether a branch should be applied to the main trunk or not. CVS is the much older of the two and it has been the standard collaboration tool for a lot of people. SVN is much newer and it introduces a lot of improvements to address the demands of most people.</p>\n'}]
['https://Stackoverflow.com/questions/1261', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/292/']