DistributedSCM or not?

hijack在他的blog上写了一篇Mercurial — DistributedSCM,并简单介绍了一下分布式SCM,interesting。最近几年,分布式SCM在开源社区越来越流行,很多开源项目已经弃用集中式SCM(如CVS/SVN)而采用了分布式SCM(如Git/Arch/Monotone)。

What’s SCM?

SCM是Software configuration management,即软件控制管理,包含了软件版本管理,文档管理,缺陷管理。wikipeida上给出了SCM具体的解释。

那么分布式SCM给我们的软件过程带来了什么好处呢,SoftEng@freecity进行了一些讨论。先让我们来比较一下集中式SCM和分布式SCM吧。

集中式SCM:

集中式SCM
从上图我们可以看到,集中式SCM是用一个中央集中仓库,所有的开发者在自己本地有一个仓库的copy,然后所有的代码修改合并需要全部提交到中央仓库进行。集中式SCM让协同开发变得简单、明了。然而,它也有几个很明显的问题:

  1. 由于中央仓库记录着整个软件版本,local只是个copy,那么switch会影响到各个local,不是很方便。
  2. local开发者如果想随便测试点东西又不污染中央仓库,这个操作将变得复杂。
  3. 中央服务器down掉以后,协同开发将停滞。后果可能会让merge变得异常麻烦。

分布式SCM很好得解决了以上问题。

分布式SCM

从上图可以看出,分布式SCM的最大特点就是peer-to-peer。 每个开发者在本地有个仓库。开发者之间可以同步到同一个上层仓库,也可以在两者之间点对点同步。针对上述的3个问题,分布式SCM可以这样解决。

  1. local上面就是一个仓库。开发者在自己的仓库里操作里,switch也随之方便。
  2. 测试方便。开发者在自己的仓库里建立多个branch,方便自己实验,然后最后才把结果同步给其他开发者。在这个过程中,所有改动都在SCM的控制下。
  3. 点对点的管理,不存在中央服务器一说,至于可以把服务器down掉的分险降到最低。

但是同时,我们也可以看到,分布式SCM在管理上会更加复杂。merge操作在SCM领域里一直是一个比较令人头痛的问题,而分布式SCM可能会让merge操作更加频繁,所以对软件模块化,开发者的良好协调有更高的要求。目前的开源软件开发模式,一般是几个核心开发者负责比较单独的模块,而其他贡献者提交patch给核心开发者,这种方式虽然并不智能,但会让merge带来比较小的副作用。

Anyway,分布式SCM肯定会成为未来的趋势。这个值得关注,:)

Reference:

RSS 2.0 . Comment . Trackback

2 Responses to “DistributedSCM or not?”

  1. Software as Art! » Why CVS/SVN is not great for me? Says:

    […] 另外: sishen对distributed scm的理解 […]

  2. Free Mind » Blog Archive » git and subversion Says:

    […] 为什么分布式版本控制系统会流行起来呢? sishen 在他的 Blog DistributedSCM or not? 里面提到了传统的版本控制和分布式版本控制模型之间的差别。下面说一下我自己的看法: […]

::...
免责声明:
当前网页内容, 由 大妈 ZoomQuiet 使用工具: ScrapBook :: Firefox Extension 人工从互联网中收集并分享;
内容版权归原作者所有;
本人对内容的有效性/合法性不承担任何强制性责任.
若有不妥, 欢迎评注提醒:

或是邮件反馈可也:
askdama[AT]googlegroups.com



自怼圈/年番新

DU21.7
关于 ~ DebugUself with DAMA ;-)


关注公众号, 持续获得相关各种嗯哼:
zoomquiet


粤ICP备18025058号-1
公安备案号: 44049002000656 ...::