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

如果您对GitMercurialPlastic SCMetc.等分布式系统有任何经验
请分享您的经验。告诉我们什么方法行之有效,问题出在哪里。

我特别想知道在传统的,商业的,非开源项目中使用分布式系统的情况,但也欢迎您回答有关其他用途的问题。

最佳答案

sebasgo指向的问题确实有很多好的答案,但是无论如何,我还是要告诉您我的个人经历。我与分散在美国各地的少数其他人一起工作,这实际上是私有(private)咨询工作。客户规模不一,但我们的团队很小,我们的工作相当快。该代码是商业代码,但在完成后由客户拥有。

我们使用Mercurial,但是特定的工具比使用分布式版本控制而不是集中式的一般工作流程重要。根据我的经验,如果没有以下两个方面,我将不再想要工作效率上的两个优势:

  • 首先,最重要的是:分支和合并很容易。这是分发的副作用,并非严格要求,但这对DVCS至关重要,我发现这对我的工作至关重要。我们每个人都可以自由分支我们需要处理的每个功能,使其在沙盒中运行(不受共享存储库的干扰),并在我们准备好将其合并回去时。“保持”其他功能的更改是与偶尔合并一样容易,并且可以选择放弃合并,并在当前解决冲突的工作过多时继续操作。我们可以获取特定的更改并将它们放在测试分支中,如果我们喜欢它们则保留结果,如果不喜欢则扔掉它们。尝试,共享和保持最佳结果的这种能力是严重的好处。正如我所说的那样,如果没有这一点,我可以轻松地工作。
  • 脱机工作。听起来并不重要,除非您不在通常的环境中工作。我可以去度假,旅行或停电,或者只想在美好的一天将笔记本电脑带到外面去并继续工作。无需停止工作就可以起身离开或失去检查工作能力的心理好处是非常现实的。

  • 除了适用于我所有项目的那些影响之外,这些影响均与我的项目无关,而与工作无关,这是我们特定安排所特有的一项好处,与您有关商业用途的问题有关,这是出乎意料的:客户实际上可以在代码上工作。他们可以拍摄快照,进行本地更改,然后将其发回给我们修复或保留经过调整的代码以用于特定目的。这对于使他们参与其中,不会与他们想要的东西保持太不同步以及允许他们在不破坏任何内容的情况下进行调整(对它们的更改,除非他们准备好,除非他们准备好-相同的规则)没有任何帮助,这是非常有用的。我们为自己申请。)

    我们没有很多提示。尽管Mercurial的命令集与Subversion(我们以前使用的)足够接近,但我们并没有遇到太多麻烦,这需要一些习惯。即使是偶尔出现的麻烦,例如意外 checkin 不应该 checkin 的二进制文件或文件,我们也可以解决,因为我们可以重新创建存储库而无需进行那些更改,并在需要时替换主存储库。这不能很好地扩展到一大群人,但是对于一个由3-4人组成的小型团队来说效果很好。

    我可以想到的一个负面问题实际上是一个问题,它是能够轻松分支的副作用:您可以拥有足够的未完成工作,而无法对其进行跟踪。这有点类似于编写书面文档的草稿:传递足够多的副本,而您不记得哪个副本进行了所需的更改。这并不是该工具的直接缺陷,而且如果有什么用,它比不具备合并能力的工具更容易将完全不同的工作重新整合在一起。但这是一种危险。我知道要管理它的唯一方法是,对有关编写有用的提交日志,有用的分支描述的纪律进行约束,而不是试图一次保留太多打开的任务。换句话说,即使是非常好的工作流程仍然是工作流程,需要引起注意,否则就会失去控制。

    我对Mercurial(我确实希望命名分支支持要容易一些)和Git(即使现在我仍然希望命令集更加直观)有一些特殊的问题,但是他们提示随之而来的一些棘手问题非常熟悉。如果这些工具没有使我认为VCS可以做的事情远远超出我开始使用它们之前所知道的范围,那么它们甚至是不可能的。

    关于version-control - 分布式修订控制系统的优缺点?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1168896/

    10-11 17:28