分布式修订控制系统的优缺点?

Lud*_*erl 10 version-control dvcs

分布式修订控制系统有哪些优缺点?

如果您对Git,Mercurial,Plastic SCM 分布式系统有任何经验, 请分享您的经验.告诉我们什么运作良好以及问题出现在哪里.

我特别想知道在传统的,商业的,非开源的项目中使用分布式系统,但也欢迎有关其他用途的答案.

qua*_*ark 6

sebasgo提出的问题确实有很多好的答案,但无论如何,让我告诉你我的个人经历.我与分散在美国各地的少数其他人一起工作,从事私人咨询工作.客户规模各不相同,但我们的团队规模很小,而且我们工作得相当快.代码是商业的,但在我们完成后由客户拥有.

我们使用Mercurial,但是特定工具不如使用分布式版本控制而不是集中式控制的一般工作流程重要.根据我的经验,生产力有两个很大的优势,我不想再没有工作:

  1. 首要的是:分支和合并很容易.这是分发的副作用,而不是严格要求,但它对DVCS至关重要,我发现它对我的工作至关重要.我们每个人都可以自由地分支我们需要处理的每个功能,让它在沙盒中工作(不受我们共享存储库的干扰),当我们准备好将它合并回来时."跟上"其他的变化是就像偶尔合并一样简单,可以选择抛弃合并并继续处理如果解决冲突在当下是太多的努力.我们可以获取特定的更改并将它们放在一个测试分支中,如果我们喜欢它们就保留结果,或者如果我们不喜欢就扔掉它们.这种尝试,分享和保持最佳结果的能力是一个重要的好处.正如我所说的那样,我不能在没有这一点的情况下舒适地工作.
  2. 离线工作.这听起来不是什么大不了的事,直到你不在平常的环境中工作.我可以去度假,旅行,或者停电,或者只是想在外面度过我的笔记本电脑,继续工作.能够起床而不需要停止工作或失去检查我的工作能力的心理益处是非常真实的.

除了那些适用于我的所有项目的效果,与工作相关而不是,特定于我们特定安排的一个好处,这与您关于商业用途的问题有关,并且出乎意料地出现:客户端实际上可以处理代码.他们可以拍摄快照,进行本地更改,然后向我们发送修复或为特定目的保留调整后的代码.这对于让他们参与其中非常有帮助,不会与他们想要的东西太过不同步,并且允许他们在不破坏任何东西的情况下调整事物(除非他们准备好,否则我们不会合并他们的变更 - 同样的规则我们申请自己.)

我们没有太多投诉.需要一些时间来习惯,虽然Mercurial的命令集足够接近Subversion(我们曾经使用过),但我们没有遇到太多麻烦.即使是偶然的肮脏,比如偶然检查不应该检入的二进制文件或文件,我们也可以绕过,因为我们可以在没有这些更改的情况下重新创建存储库,并在需要时替换我们的主存储库.这不适合一大群人,但对于一个3-4人的小团队来说效果很好.

我能想到的一个负面影响实际上是一个问题,是能够轻松分支的副作用:你可以有足够的待处理工作,你会忘记它.这有点类似于书面文档的许多草稿:传递足够的副本,你不记得哪个副本有你想要的更改.这并不是该工具的直接缺陷,如果有的话,它可以更容易地将不同的工作重新组合在一起,而不是合并能力较差的工具.但这是一种危险.我知道管理它的唯一方法是遵守编写有用的提交日志,有用的分支描述,而不是试图同时保留太多打开的任务.换句话说,即使是一个非常好的工作流程仍然是一个工作流程,需要注意或它失控.

我有水银(我真想叫分支的支持只是一个特定的问题一点位更容易)和Git的(我真的想设置为更直观的命令,即使是现在),但他们对边角问题的投诉随之而来非常熟悉.如果这些工具没有推动我认为VCS可以做的远远超出我开始使用它之前所知道的范围,那么它们甚至是不可能的.