明确一点,使用DVCS可以是一个非常有效的选择:
StackOverflow(不是开源项目)正在使用Mercurial(请参见HgInit,由Joel Spolsky编写)。
他们从SVN迁移到了DVCS:
还有,DVCS的合并工具比SVN更加先进。
(他们需要维护许多平行略有不同版本的代码库,在SO网站、StackExchange网站V1和V2、Area 51等之间)
请参阅“DVCS和CVCS之间的区别”或“Mercurial或git相对于svn在分支/合并方面的好处是什么?”。
对于企业环境(我所在的地方),任何形式的转换都不是轻松的,因为它需要:
因此,分布式版本控制系统在企业环境中也非常有用:
(请参见“Git在企业中的采用率?”或“企业中基于Git的源代码控制:建议的工具和实践方法?”。)
即使对于新项目,它的实施也不像在较小的结构或开源环境中那样容易。
对于单个开发者而言,使用Subversion是否更好呢?
实际上,对于单个开发者而言,Subversion 更繁琐(设置更麻烦)。
但是继续使用 SVN 的一个好理由是惯性。如果 SVN 对你的项目(或公司)运行良好,则没有必要经历切换的痛苦。可能需要一些培训成本来教导大家新工具(以及新的工作流程),却没有真正的好处。
我认为对于类似媒体资产、Photoshop文件、After Effects合成等大型文件,Subversion仍然比Mercurial和Git更好用。我记得Linus Torvalds在这个Google Tech Talk中提到Git的问题之一就是处理大文件的能力。Mercurial有一些扩展可以将大型文件存储在仓库之外。因此在这种情况下,它们两者都会出现一些性能下降和/或其他问题。
另一方面,当前的Blender Open Movie Project正在使用Subversion。我不认为他们用它来存储渲染后的帧,因为每次渲染通过至少需要几千兆字节的数据。但是,仍然存在许多大文件的一个大型仓库,包括所有的3D场景、对象、骨架、纹理和脚本。
如果你长期使用SVN,我可以理解你继续使用它的原因。特别是在小公司或编码圈子中,当你可能不使用它们更强大的功能时,从SVN转换到git或Mercurial可能会让你望而却步。正如Thilo所指出的,使用SVN的大型公司将会发现这种变化是巨大的。
此外,我认为SVN仍然有其优势,尤其是在教授版本控制方面。但这只是基于我在大学学习SVN和自学git的个人经验,所以我的观点并不客观。
话虽如此,如果你要从零开始建立一个存储库,我想不到任何情况下你会认为SVN是绝对必需的。也许在处理遗留系统时才需要。
或者遗留用户;)
我不知道有什么内在的理由支持集中式版本控制系统,但有许多外在因素影响,例如遗留系统、管理惯性、学习曲线等。
分布式版本控制系统正在证明自己是“更好的捕鼠器”。
真正的问题不是SVN vs. Git/Mercurial,而是分布式和集中式的区别。在某些情况下,如需要严格控制和完整日志记录的企业环境中,集中式可以更好。
我们使用Subversion作为数据存储,这是一个非常复杂的合并过程(我们进行硬件开发,设计文件是未经记录的二进制格式)。 SVN的优点是您可以在文件上设置锁定,因此只有一个开发人员可以处理文件,并且还被强制检查最新文件才能进行编辑。
当集中式范例适用时,Subversion是理想的选择。
其中一个适用情况是在撰写论文时。只需保留一份主要副本供所有人使用更为合理。我们不需要创建分支或标签。我们只需要跟踪谁进行了更改,然后传播给所有作者。
Subversion(版本控制工具)与Apache(Web服务器)非常兼容!