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

时间:2009-07-22 20:57:48

标签: version-control dvcs

分布式版本控制系统有哪些优点和缺点?

如果您对GitMercurialPlastic SCMetc.等分布式系统有任何使用经验 请分享您的经验。告诉我们哪些方面运作良好以及问题出现在哪里。

我特别感兴趣的是听说在传统的,商业的,非开源的项目中使用分布式系统,但也欢迎有关其他用途的答案。

4 个答案:

答案 0 :(得分:6)

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

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

  1. 首先:分支和合并很容易。这是分发的副作用,而不是严格要求,但它对DVCS至关重要,我发现它对我的工作至关重要。我们每个人都可以自由地分支我们需要处理的每个功能,让它在沙盒中工作(不受我们共享存储库的干扰),当我们准备好将它合并回来时。“跟上”其他的变化是就像偶尔合并一样简单,可以选择抛弃合并并继续处理如果解决冲突在当下是太多的努力。我们可以获取特定的更改并将它们放在一个测试分支中,如果我们喜欢它们就保留结果,或者如果我们不喜欢就扔掉它们。这种尝试,分享和保持最佳结果的能力是一种严重的好处。正如我所说的那样,在这一点上我不能轻松工作。
  2. 离线工作。这听起来不是什么大不了的事,直到你不在平常的环境中工作。我可以去度假,旅行,或者停电,或者只是想在外面度过我的笔记本电脑,继续工作。能够起床而不需要停止工作或失去检查我的工作能力的心理益处是非常真实的。
  3. 除了那些适用于我所有项目的效果,与工作相关而不是,特定于我们特定安排的一个好处,这与您关于商业用途的问题有关,并且出乎意料地出现:客户可以实际工作码。他们可以拍摄快照,进行本地更改,然后向我们发送修复或为特定目的保留调整后的代码。这对于让他们参与其中非常有帮助,不会与他们想要的东西太过不同步,并且允许他们在不破坏任何东西的情况下调整事物(除非他们准备好,否则我们不会合并他们的变更 - 同样的规则我们申请自己。)

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

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

    我对Mercurial有特殊的问题(我真的希望命名分支支持只是一个位)和Git(我真的希望命令集更直观,即使现在),但他们抱怨非常熟悉的角落问题。如果这些工具没有把我认为VCS可以做的事情推到我开始使用它之前远远超出我所知道的范围,那么它们甚至是不可能的。

答案 1 :(得分:3)

在stackoverflow上阅读此question,了解有关GIT与SVN以及中央与分布式系统的大量信息。

答案 2 :(得分:2)

我没有尝试过其他分布式系统,因此无法对它们发表评论。但有一件事让我对Git感到恼火,那就是没有办法只克隆部分存储库。 最后我查了一下,它也缺少类似于svn:externals的东西。我发现svn externals经常在公司内用于检查其他存储库中的库等。

答案 3 :(得分:2)

是的,请查看stackoverflow问题。如果您想了解有关Git如何与其他版本控制系统进行比较的更多信息,那么有一个很好的信息网站:Why Is Git Better Than X?