InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

ThoughtWorks开发人员最喜爱的分布式版本控制系统

作者 Abel Avram 译者 张晓庆 发布于 2010年4月11日

领域
运维 & 基础架构,
过程 & 实践,
架构 & 设计,
语言 & 开发
主题
Ruby ,
版本化 ,
Java ,
版本控制 ,
动态语言 ,
协作 ,
.NET ,
语言 ,
配置管理 ,
团队工作 ,
编程 ,
架构 ,
敏捷 ,
git

Martin Fowler在ThoughtWorks的软件开发邮件列表中做了一个调查,了解开发人员怎么看待一些版本控制系统(VCS)。他据此对主要的版本控制系统写了一篇评论文章,并对集中式和分布式系统进行了比较。

调查的结果如下:

 

工具

最佳

不错

有问题

危险

无意见

有效回复

赞成比例 %

git

65

19

1

0

14

85

99%

Mercurial

33

27

2

0

36

62

97%

Subversion

20

72

6

1

0

99

93%

Bazaar

1

13

3

0

80

17

82%

Perforce

1

26

16

1

54

44

61%

CVS

0

14

59

11

15

84

17%

ClearCase

0

3

14

41

41

58

5%

VSS

1

1

11

64

22

77

3%

TFS

0

0

32

22

44

54

0%

参与者把9种版本控制系统进行分类:最佳、不错、有问题、危险、无意见,最后一个是说他们根本没有用过。“有效回复”是指去除“无意见”的所有其他回复,而“赞成比例%”是指(最佳+不错)/ 有效回复的比例。

虽然调查的范围有限,只表明了ThoughtWorks公司内部的主观看法,但该结果或许也可以代表其他公司对版本控制系统的看法。

两个开源分布式版本控制系统,gitMercurial赞成比例最高,均超过了95%。开源集中式版本控制系统Subversion,赞同比例也很高,达到93%。而排名最低的是商业系统:IBM的ClearCase,微软的VSS和TFS

所有的99个回复者都用过Subversion,85个用过git,84个用过CVS,而使用过Bazaar的只有17个人。多达77个人使用过VSS,但是其赞成比例只有3%。

这些结果与老马最初关于版本控制系统的评论不谋而合。通过与ThoughtWorks员工及合作者的讨论,马丁福勒总结说大家普遍接受的版本控制系统有3种,也是值得推荐的:Subversion、git和Mercurial。这意味着你需要在集中式和分布式VCS之间选择。对老马来说,分布式VCS的好处是“给工作带来了许多灵活性,但如果使用不当,这些灵活性反而会比较危险”。Subversion的好处是:

鼓励使用简单的中央仓库模型,不鼓励大规模使用分支。如果你像我的许多朋友那样,正在使用持续集成,这种模型相当好用。Subversion是个绝佳选择。

虽然分布式VCS给了你很多灵活性,可以灵活管理工作流程,然而据我所知,多数人的工作模式仍然基于一个共享的主线仓库,这也可以给持续集成使用。虽然现代的VCS都有强大的工具合并不同人的变化,但仍然只能是文本合并。持续集成仍然需要语义一致性。所以虽然团队使用了分布式VCS,但仍然会有中央式主仓库的想法。

老马进而对分布式VCS和集中式VCS做了对比:

  • 速度 - 由于没有本地仓库拷贝,Subversion较慢,尤其是当服务器远在其他大洲时。
  • 连接 - 即使网络断掉,分布式VCS也能够使用。
  • 分支 - 分布式VCS鼓励使用分支:

分布式VCS鼓励为试验快速创建分支。你也可以在Subversion中创建分支,但它们对所有人可见,妨碍了大家这么做。与此类似,分布式VCS鼓励在工作中设置检查点:你可以向本地代码库签入没有完成的代码,它们可能测试不过,甚至编译不过。同样,Subversion中你也可以在开发者分支中这样做,但由于这些分支是共享的,大家都不愿意这样做。

老马提到集中式VCS更擅长处理二进制文件:

特定情况下,即使整个团队已经熟练使用分布式VCS,也最好选择Subversion。这就是当使用二进制,VCS无法合并的时候-比如Word文档或者幻灯片。此时需要使用悲观锁,只能有一个签出是可写的-这就需要一个集中式的系统。

老马对ClearCase和TFS的评价很低:

有两个VCS倍受批评:IBM的ClearCase和微软的TFS。它们广受批评的原因之一是客户使用广泛,通常是公司政策强制使用。

...我尊敬的一些开发人员曾频繁使用这些产品,但是并不推荐使用。

VSS被认为是最差的选择:

在结束不推荐的版本控制系统之前,我想说一下这个尤其糟糕的工具:Visual Source Safe,或者可以称之为:Visual Source Shredder(译注:shredder,粉碎机)。感谢上帝,它现在已经很少见了,但是如果你还在用它,我们强烈建议你换掉,就现在!它不但用起来非常痛苦,我还听说过多次数据仓库崩溃的故事,实在不能让人信任。

老马的看法比较主观,并没有比较它们的实际功能。文章Better SCM Initiative中对28种版本控制系统做了深度比较,但并没有排名,而是提供一些关键功能指标,包括:原子提交、文件和目录的移动或者重命名、移动或者重命名后的智能合并、文件和目录拷贝、能够只在一个目录工作、跟踪没有提交的变化、文档、部署的难易程度等等,这样用户可以自己决定哪个VCS最好。

Scott Chacon写了个帖子为git辩护,解释为什么他认为git比Mercurial、Bazaar或者SVN更好:廉价的本地分支、一切都在本地、速度快、适用于任何工作流程,以及其他一些原因。

当然,每个开发人员或者团队都有自己喜欢的CVS。您最喜欢的是什么呢?您有没有高兴或者惨痛的经历与大家分享?

参见英文原文:ThoughtWorks’ Developers Favor Distributed Version Control Systems

译者 张晓庆 有多年的软件开发经验,主要是J2EE项目、Web应用和分布式系统等等,在电信网管开发方面经验丰富。

RE 发表人 Doe Jon 发表于
似乎用Bazaar的不多阿 发表人 Culpa Mea 发表于
我的排名 发表人 Daobing LI 发表于
Git天生原先只是说内容追踪系统哈... 发表人 Zoom Quiet 发表于
CVS有啥问题?貌似没有提及。 发表人 WANG XUE 发表于
Git那么多人喜欢啊? 发表人 lei zhao 发表于
tfs有这么差吗 发表人 余 震宇 发表于
  1. 返回顶部

    RE

    发表人 Doe Jon

    如果VSS也算是个版本管理系统的话, 那它就是世界上最烂的版本管理系统.

  2. 返回顶部

    我的排名

    发表人 Daobing LI

    我的排名: git svn bzr rcs (rcs 仅在需要处理一两个文件时使用)

  3. 返回顶部

    Git天生原先只是说内容追踪系统哈...

    发表人 Zoom Quiet

    PEP 374 www.python.org/dev/peps/pep-0374/
    这是俺见过的最全的对比, Hg 最均衡,而且和SVN 可以无缝协作; Git 是最强大的玩具,可以扩展出N多模式,但是...

  4. 返回顶部

    CVS有啥问题?貌似没有提及。

    发表人 WANG XUE

    CVS有啥问题?貌似没有提及。

  5. 返回顶部

    Git那么多人喜欢啊?

    发表人 lei zhao

    Git没用过图形客户端呢

  6. 返回顶部

    似乎用Bazaar的不多阿

    发表人 Culpa Mea

    我倒是很喜欢Bazaar,虽然它的速度是最慢的,但是功能最多,使用也比较灵活.

    我有很多项目到处commit... U盘,Email, ftp, windows共享, 甚至dropbox里..

  7. 返回顶部

    tfs有这么差吗

    发表人 余 震宇

    VSS差这点没有人有疑惑,不过tfs有什么大问题吗?
    如果使用的是微软的vs.net开发环境,不用tfs用什么呢?