2009-07-22 193 views
10

分布式版本控制系统的优点和缺点是什么?分布式版本控制系统的优缺点?

如果你有一个分布式系统,如GitMercurialPlastic SCMetc. 请分享您的经验,任何经验。告诉我们什么运作良好,哪里出现问题。

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

+1

http://stackoverflow.com/search?q=distributed+version+control – arathorn 2009-07-22 21:14:58

回答

6

问题sebasgo指出真的有很多很好的答案,但让我告诉你我的无论如何个人经验。我与遍布美国的一小撮其他人一起工作,从事基本上私人的咨询工作。客户的规模不尽相同,但我们的团队规模不大,而且我们的工作速度相当快。代码是商业的,但在我们完成时由客户拥有。

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

  1. 首先:分支和合并是容易的。这是分发的一个副作用,而不是严格的要求,但这对于DVCS是至关重要的,我认为这对我的工作至关重要。我们每个人都可以自由地分配我们需要处理的每个功能,让它在沙箱中工作(不受来自我们共享存储库的干扰),以及什么时候我们准备好重新合并。“跟上”其他的变化就像偶尔合并一样容易,可以选择放弃合并,并继续处理解决冲突是目前的太多努力。我们可以抓住特定的变化并将它们放在一个测试分支中,如果我们喜欢它们,可以保留结果,否则就抛弃它们。这种尝试,分享,并保持最佳效果的能力是严重的好处。正如我所说,这不是一个我可以舒适地工作,没有在这一点上。
  2. 脱机工作。这听起来不是什么大不了的事情,除非你在平常的环境下工作。我可以去度假,旅行,或者中断,或者只是想在愉快的一天把我的笔记本电脑带到户外,继续工作。能够起床走路而不需要停止工作,或失去检查点我工作能力的心理好处是非常现实的。

除了这些影响适用于我所有的项目,与工作有关而不是影响我们特定安排的一个好处,它涉及到您的商业使用问题和意想不到的问题:客户可以实际在代码上工作。他们可以拍摄快照,进行本地更改,或者向我们发回修复或为特定目的保留调整后的代码。这对于让他们参与进来有很大的帮助,不会与他们想要的东西有太大的不同步,并且允许他们在不破坏任何东西的情况下调整事物(除非他们准备好了,否则我们不会合并他们的变化 - 同样的规则我们自己申请。)

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

我可以想到的一个负面问题实际上是一个问题,是能够轻松分支的副作用:您可以拥有足够的未完成工作,但您失去了跟踪工作。这有点类似于有许多书面文件的草稿:通过足够的副本,你不记得哪个副本有你想要的更改。这并不是工具的直接缺陷,如果有的话,它可以比容易合并的工具更容易将不同的工作重新组合起来。但这是一个危险。我知道管理它的唯一方法是遵守有关编写有用的提交日志,有用的分支描述,而不是试图一次保留太多的开放任务。换句话说,即使是一个非常好的工作流程仍然是一个工作流程,需要注意或者失控。 (我真的想命名分支支持只是位更容易)和Git(我真的希望命令集更直观,即使是现在),但他们是投诉关于非常熟悉的角落问题。如果这些工具没有推动我认为VCS可以做的事情的范围远远超出我在开始使用它之前所知道的范围,他们甚至不可能实现。

2

我还没有尝试过其他分布式系统,所以无法评论他们。但是让Git烦恼的一件事是,无法只克隆部分存储库。 最后我检查了一下,它也缺少类似svn:externals的东西。我发现svn externals经常用于检查其他存储库中的库等。

+1

您可以在git中定义子模块,它允许您只克隆子模块,但是,为此,您的存储库必须具有该结构,您不能克隆时做。 – txwikinger 2009-07-22 21:12:25

+0

这是分布式版本控制的概念,您作为用户必须在本地计算机上拥有完整的回购。请记住,只有当您将项目克隆到本地计算机时,您才能获得所有内容。下拉将只给你改变。 – 2013-01-23 23:43:57

3

阅读关于GIT vs SVN以及中央VS分布式系统的大量信息的stackoverflow上的这个question

2

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