我已经同时使用了SVN和CVS,但需要为我将要开始的新项目选择一个.
任何广泛使用过的人都可以提供一些优点和缺点,他们认为哪个更好?最好的学习资源也将受到赞赏.
这将是一个小项目,只有一两个开发人员开始.
我用过这两个.没有比较; 你想要svn.使用CVS的唯一原因是因为您正在进入或接管具有不想改变现状的管理的遗留系统.如果您正在开始一个新项目,那么认为CVS优于Subversion实际上是不可能的.
如果你google,你应该找到大量的比较,以及使用Subversion而不是CVS的理由.Subversion相对于CVS的一些优点:
可以干净地移动或重命名文件或目录
原子提交
"便宜"的复制和分支
提交是整个树上的变更集(不仅仅是单个文件的历史记录)
说完这一切之后,我建议你也去探索一些像Bazaar,Mercurial和git这样的分布式VCS.我个人在我的所有项目中使用git.
Subversion对CVS有一些实质性的胜利:
好的远程选项http/https/svn vs pserver
原子提交
无处不在的工具支持
改名
目录版本控制
但它有严重的缺点.到目前为止,最大的分支和标签不是svn中的一等公民,它们只是遵守惯例的目录.除了失去真正的分支和标记的一些好处(在其他评论中提到)之外,它产生的最大问题是如果让它变得非常容易搞砸了.
Subversion使用约定而不是配置意味着您需要提前考虑您的存储库结构并确保每个人都遵守它.此外,你为后代创造了一个受伤的世界,更不用说任何需要帮助你回购的工具了.
在1.5之前,合并和镜像几乎不存在(很好的帮助).1.5已采取措施解决这两个问题,但仍有改进的余地.颠覆中的合并仍然比它需要的更难.
SVN胜过CVS几乎是不费吹灰之力的.但是,你至少要考虑DVCS必须提供的东西(Git,Hg,Bzr),或者你的预算是否允许商业工具具有良好的声誉(Accurev,Perforce).
Subversion可能是正确的选择,但你必须做好功课才能获得最佳效果.从红皮书http://svnbook.red-bean.com/开始
虽然在大多数情况下我会选择Subversion而不是CVS,但你应该知道Subversion缺少什么:
CVS将标签和分支视为不同的东西; Subversion没有.这意味着构建在Subversion之上的第三方工具(例如具有源代码控制集成的IDE)在了解差异方面有更难的工作.您通常需要做一些特殊的配置来告诉它您的标签和分支的位置,并且您必须确保您的用户坚持某个文件系统布局.
Subversion无法查看文件并告诉您何时有人从中创建了分支或标记.像CVSGraph这样的工具可以使用此信息绘制文件历史记录的树.要使用Subversion执行此操作,您需要搜索所有分支/标记目录,而我还没有看到任何可以很好地完成此任务的工具.
根据我的经验,CVS已经存在更长时间,第三方工具更稳定.
叫我老式,但我更喜欢CVS下的分支/标记模型.
在CVS中,分支和标签是不同的东西.标签是修订的标签.它们对于标记要与您的网络服务器同步的文件的PRODUCTION标记等内容非常有用.您无需合并即可更新PRODUCTION文件 - 只需移动标记即可.
分支与主文件位于相同的"命名空间"中 - 可以轻松跟踪特定文件的所有模块.
在SVN中,没有标签这样的东西.只有分支机构.如果你想要标签,你需要创建一个分支并假装它是一个标签.分支基本上是文件的副本.上次我使用SVN进行分支/合并时,你必须记录预分支文件的修订版,如果你希望将它合并在一起(注意,我不是SVN专家,所以这可能已经改变了).
话虽这么说,我认为SVN在其他方面都更好,你可能不应该用CVS开始一个新项目.