10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

  • 2010-04-11
  • 本文字数:1913 字

    阅读完需:约 6 分钟

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

调查的结果如下:

工具

最佳

不错

有问题

危险

无意见

有效回复

赞成比例 %

git

65

19

1

复制代码
14

85

99%

Mercurial

33

27

2

复制代码
36

62

97%

Subversion

20

72

6

1

复制代码
99

93%

Bazaar

1

13

3

复制代码
80

17

82%

Perforce

1

26

16

1

54

44

61%

CVS

复制代码
14

59

11

15

84

17%

ClearCase

复制代码
3

14

41

41

58

5%

VSS

1

1

11

64

22

77

3%

TFS

复制代码
32

22

44

54

0%

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

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

两个开源分布式版本控制系统, git Mercurial 赞成比例最高,均超过了 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

2010-04-11 00:105471
用户头像

发布了 37 篇内容, 共 13.0 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

即时通讯技即时通讯技术文集(第8期):移动端弱网优化系列 [共14篇]

JackJiang

EasyNLP集成K-Global Pointer算法,支持中文信息抽取

阿里云大数据AI技术

人工智能 深度学习 信息抽取 算法模型 企业号 2 月 PK 榜

颜色的认识与使用(大屏颜色/仪表板报告设计)

Data 探险实验室

大屏配色 颜色 可视化颜色 配色搭配

云数据库TiDB免费试用初体验

TiDB 社区干货传送门

社区活动 6.x 实践

Jmeter安装配置详细教程

Jmeter 性能测试 接口测试

中移链结合CA证书实现节点准入控制

BSN研习社

Serverless Kubernetes的思考与征程

阿里技术

Kubernetes Serverless

“四维一体”,银行数据使用安全新姿势|盾见

极盾科技

数据安全

2023年关于身份安全的4 个预测

HummerCloud

爆肝!《Java权威面试指南(阿里版)》,冲击“金三银四”有望了

程序知音

Java java面试 java架构 后端技术 Java面试八股文

测试角色在项目各阶段的项目管理tips

京东科技开发者

项目管理 测试 测试 单元测试 企业号 2 月 PK 榜

云数据库 TiDB 入门级别的体验

TiDB 社区干货传送门

6.x 实践

春季3月 · CSPO认证周末班【提前报名特惠】“价值交付课程” | 全国招生

ShineScrum

产品经理 PO Product Owner 产品负责人 产品愿景

一文详解 Netty 组件

京东科技开发者

Java 架构 Netty nio 企业号 2 月 PK 榜

前端监控之性能与异常

京东科技开发者

监控 服务端 页面 企业号 2 月 PK 榜 js代码

DevEco Studio 3.1 Beta1版本发布——新增六大关键特性,开发更高效

HarmonyOS开发者

HarmonyOS

最佳实践|用腾讯云智能文字识别实现网约车信息管理

牵着蜗牛去散步

人工智能 腾讯云 腾讯 最佳实践 文字识别

英方软件加入龙蜥社区,联手夯实数字基础设施坚实底座

OpenAnolis小助手

开源 数据复制 英方软件 龙蜥社区 CLA

手把手教你为基于Netty的IM生成自签名SSL/TLS证书

JackJiang

集度汽车 Flink on native k8s 的应用与实践

Apache Flink

大数据 flink 实时计算

ChatGPT“狂飙”出圈,快来分享你眼中的ChatGPT吧!

InfoQ写作社区官方

热门活动 ChatGPT

打造江西数智产业高地,百度飞桨人工智能产业赋能中心落户南昌青山湖

飞桨PaddlePaddle

飞桨 PaddlePaddle

龙蜥开发者说:为爱发电!当一个龙蜥社区打包 Contributor 是怎样的体验?| 第16期

OpenAnolis小助手

Linux 开源 rpm 龙蜥社区 贡献

Pycharm+PyQt5+Python3.5开发环境配置(详细教程)

Python pycharm 环境安装 PyQt PyQt5

春季3月 · CSM认证周末班【提前报名特惠】“全球金牌课程”CST导师亲授

ShineScrum

ScrumMaster CSM

BSN-DDC基础网络详解(三):注册门户账号和业务开通(2)

BSN研习社

BSN-DDC

Python基础知识入门(一)

漫步桔田

Flink CDC+Kafka 加速业务实时化

Apache Flink

大数据 flink 实时计算

互联网企业如何进行数字化转型?业务需求迭代频繁的应对之策!

优秀

数字化转型 互联网行业

ThoughtWorks开发人员最喜爱的分布式版本控制系统_Java_Abel Avram_InfoQ精选文章