Version control 对于一个实际上从未分布式的团队来说,分布式版本控制的优势是什么?

Version control 对于一个实际上从未分布式的团队来说,分布式版本控制的优势是什么?,version-control,Version Control,在远程工作时,我们的团队只能通过远程桌面访问我们的源代码到我们的办公电脑,所以我们永远不会真正在脱机模式下工作。像Mercurial或Git这样的分布式版本控制系统是否仍然比我们当前的集中式Subversion设置具有优势?如果是,它们是什么?有什么缺点或陷阱吗?我在许多地方读到,转向分布式版本控制需要改变思维。有人能解释一下在这方面需要做哪些更改吗?如(集中式VCS)中所述,主要优点是: 本地提交(您可以更频繁地在私有分支中提交,然后清除要推送到其他repo的历史记录) (您可以从多个回购中

在远程工作时,我们的团队只能通过远程桌面访问我们的源代码到我们的办公电脑,所以我们永远不会真正在脱机模式下工作。像Mercurial或Git这样的分布式版本控制系统是否仍然比我们当前的集中式Subversion设置具有优势?如果是,它们是什么?有什么缺点或陷阱吗?我在许多地方读到,转向分布式版本控制需要改变思维。有人能解释一下在这方面需要做哪些更改吗?

如(集中式VCS)中所述,主要优点是:

  • 本地提交(您可以更频繁地在私有分支中提交,然后清除要推送到其他repo的历史记录)
  • (您可以从多个回购中提取,也可以从快速建立的中间回购中推送,在那里您可以执行中间任务,如持续集成测试)
最后一点需要最“思维上的改变”,而且有点可怕(“我可以从任何回购中获利?!”)
但是,一旦您意识到这些好处,您就可以真正拥有更高效的开发周期,因为您能够监控(通过从您的同事那里获取承诺)一些同事的开发。如果他们正在开发您需要的功能,您可以更快地开始集成它。
(DVCS需要记住的一点是,它不会阻止“中央”回购协议的建立,以供其他开发人员使用)

至于持续集成,您可以在将代码自动(如果为“绿色”)推送到“中央”repo之前,将代码推送到桌面上运行所有测试的本地repo,而不是直接从您的repo推送到负责CI的中央服务器。

它非常有效,您现在可以将“永不中断构建”的代码推送到官方的中央回购(central repo),从而使您的CI服务器变得毫无用处;)

开发机器可能彼此相邻,但源代码仍然分布在它们之间。对于管理不同开发人员所做的源代码更改来说,机器在物理上非常接近并不重要。

我建议您对分散的工具集如何改进svn做一个非常透彻的解释。它还将帮助您理解概念上的差异

我想强调的一个重大改进是合并跟踪的概念。Subversion在1.5之前根本没有这个功能,而且由于它处理修订和分支的方式不同,它可能永远不会像分散的工具那样好。没有人喜欢合并。最好尽可能地减轻疼痛。另请参见:


当我从subversion切换到其他目录时,我在思想上的最大变化是忘记了历史是严格线性的,分支只是将代码复制到另一个目录。注意,在Git和Mercurial中,您不签出存储库的子目录。你不会看到“git checkout”之类的东西。埃里克·辛克(Eric Sink)对历史存储方式的差异做出了非常好的解释。我推荐。

可能重复@Greg-不太可能,这是一个更广泛的问题。Git vs SVN是这个问题的狭义版本。@webdestroya:我选择这个问题是因为这里有一些与更广泛的问题相关的优秀答案,请看一看。@Greg-啊,我明白了,在这种情况下-很好的回答。事实上,正是这个问题及其被接受的答案启发了我提出这个问题。我将在这里通读更多的答案。我的意思是,我们团队中没有一个开发人员是离线工作的。脱机时提交到本地存储库的能力是分布式VCS的一个特性,这通常被称为其优势之一。我问这个问题是想看看这个功能对我们是否仍然有用,以及DVCS的其他功能是否值得我们从Subversion切换。谢谢。关于更容易集成和改进持续集成的要点正是我想要的。