为什么要使用SVN?有没有隐藏的专业人士(通过GIT/Mercurial/Bazaar)?

Iva*_*van 22 svn git version-control mercurial bazaar

可能重复:
为什么git比Subversion更好?

关于版本控制系统,我已经阅读了很多(虽然不足以得到完美的图片),显而易见的结论是GIT是最好的.或者是Bazaar.或Mercurial.但如果是这样,那么没有人会使用SVN,但他们仍然这样做.为什么?由于缺乏经验,我自己对vcs通常是最好的没有自己的看法.你能分享一下你的想法吗?

Zed*_*Zed 35

我目前正在为美国研究机构维护版本控制服务.除了Git和Mercurial,我们不仅支持SVN,还支持CVS.

SVN在我们的用户中的"杀手特征"是狭窄的克隆.您可以在层次结构中只检查一个子目录,只下载与该目录相关的文件,并且仍然可以进行提交.Git最近在这个称为稀疏检出的功能上给出了一个类似但不太有用的变体(参见Git 1.7.0中的Sparse checkout?).这使您可以过滤工作树,但仍然强制您下载整个项目的整个历史记录,即使大型二进制文件不是参与其中.请注意,磁盘很便宜,如果你事先吸收初始克隆的命中,后续拉动速度足够快,但是这对于那些在他们意识到需要克隆之前就已经去过的人没有帮助,无论如何甚至Git的稀疏检查不会让你开始工作树五层,所以它看起来有点难看.

此外,用户发现authz文件比Git提交钩子更容易编写,比任何DVCS更容易使用SVN语法和方法,并且最重要的是,在SVN中已经有成千上万的提交历史.将大型Subversion存储库迁移到Git或Mercurial的实验提供了不同的结果,这些科学家试图在他们自己的项目上完成工作,而不是将时间花在开发DVCS上.

由于类似的原因,CVS仍有以下情况.想象一下,作为一个Git用户,它具有稀疏检出功能,允许您随意重新映射分支中的文件显示在工作树中的位置,使用与存储库一起版本化的格式,并按照通常的拉动进行分发,这样您就可以编写可以包含其他组的组的定义,并且只删除克隆上文件系统放置所需的文件.这在CVS模块中很简单,在每个DVCS中都是不可能的.对于CVS的所有罪行(并且相信我,我们非常了解它们,并且不顾一切地阻止新的CVS项目,除非它们绝对不能没有模块),所以不可能说服使用该功能的团队迁移到另一个版本控制系统.

DVCS软件带来了一些令人敬畏的创新,但它们也缺少一些开发人员认为理所当然的东西.在选择之前,请确保事先知道您的要求.

  • 当然,但没有人要求反对DVCS.问题是,为什么你会使用SVN,一个完全正确的理由是有很多SVN历史. (6认同)
  • 将数千个提交从系统A迁移到系统B总是很困难.这是反对交换系统的论据,而不是反对DVCS的论据. (2认同)

det*_*tly 17

谈论我工作的公司 - 使用SVN的最大原因是能够在版本控制下保留庞大的专有格式二进制文件.特别是,数以千计的CAD文件库.在这种情况下,它确实是有意义的有VCS是基于文件的,像SVN的,而不是如Git基于文本信息- .

暂且不管你是否可以用Git进行浅层"检查",或者它存储二进制数据的程度如何,事实是它的设计目的是跟踪浮动在源代码树周围的文本信息.除此之外,该模型不适合跟踪二进制数据库.

老实说,这是我推荐它的唯一可靠理由:P

  • 嗨,截至今天(2015年),您是否仍然同意它是图像和大文件的好选择? (2认同)

syl*_*aar 11

SVN建立并成熟,具有同样成熟的工具.


sle*_*ate 10

除了人们提到的其他事情(大量二进制数据,成熟,稳定等)之外,svn是建立在经典的分层模型之上的,这种模型与基于补丁/变更的修订基本不同.

我们公司决定继续使用SVN,因为这种模式符合我们处理发布周期和分支的方式.我们认为版本的直接进展是一种恩惠,而不是一种祸根.更新被推送到集中式存储库,并且某些被视为"稳定"的修订被签出到实时环境中.在任何时候,都可以立即清楚每个环境对所有相关人员的状态.(是的,这可以通过git实现.)即使是对版本控制或软件开发一无所知的管理人员也可以说:"我们喜欢你在版本2547时拥有它的方式".

另一方面,我应该提一下,我将darcs和git用于我和我的朋友以及合作FOSS的人一起工作的项目,因为基于补丁的分布式模型适合我们.我们可以临时推进项目的时间表,并挑选各种变化.

我的公司SVN的优势在于其强大的层次结构和对已经熟悉"登录"和"下载"概念的非程序员的可访问性.


Gre*_*con 6

当存储库包含大量二进制数据时,Subversion具有优势,这些数据不能很好地进行增量压缩.Subversion checkout只抓住头部,但是git克隆了整个历史记录,它的重量可以达到几千兆字节.是的,这对于飞行模式很好,但是获取初始克隆可能需要数小时.

  • 无法推或拉使得这个功能对我工作的所有环境几乎毫无价值.没有人想要手动发送补丁,或者试图整理它们. (7认同)
  • 如果您不想获取git存储库的所有先前历史记录,则可以执行浅层克隆(使用`git clone --depth = $ depth`).您不能将此不完整的克隆用于进一步克隆,推/拉等,但它足以能够使用本地版本控制进行编辑,并将这些提交作为上游包含的补丁发送. (2认同)

Ken*_*ina 5

人们仍在使用Subversion,因为它是使用第一个范例来设计版本控制系统(集中式).切换到分布式(以及基于变更而不是基于版本)可能需要一些时间来习惯(正如您在Joel的经验中看到的那样),并且由于抵制变化,许多团队决定不使用它.

Mercurial工具非常成熟,在我看来与SVN相当.

  • Subversion的范式不是第一个出现的范例.此范例继承自CVS,后者实现了客户端 - 服务器模型.在此之前,有SCCS和RCS本地共享存储库模型. (3认同)
  • 这种范式仍然是集中的. (3认同)
  • @Juliano,SVN和CVS遵循相同的范例,所以CVS不能在SVN之前出现......集中式VC无法在集中式VC之前出现...... (2认同)