源控制 - 分布式系统与非分布式系统 - 有什么区别?

时间:2010-03-18 20:24:39

标签: version-control tfs mercurial dvcs

我刚刚阅读了Spolsky关于分布式与非分布式版本控制系统http://www.joelonsoftware.com/items/2010/03/17.html的最后一篇文章。这两者有什么区别?我们公司使用TFS。这个阵营到底是什么阵营?

6 个答案:

答案 0 :(得分:31)

不同之处在于出版过程:

  • CVCS(集中化)意味着:要查看同事的工作,您必须等待他们发​​布(提交)到中央存储库。然后,您可以更新您的工作区。
    • 您是活跃的制作人:如果您不发布任何内容,则无人看到任何内容。
    • 您是被动消费者:您在刷新工作区时会发现新的更新,并且无论您是否需要,都必须处理这些更改。

  • DVCS意味着:没有“一个中央存储库”,但每个工作区都是一个存储库,要查看您同事的工作,您可以参考他/她的回购并简单地将其历史记录放入您当地的仓库。
    • 您是被动生产者:任何人都可以“插入”您的仓库并将您执行的本地提交提取到他们自己的本地仓库中。
    • 您是活跃消费者:除非您明确指出(通过合并或rebase),否则您从其他仓库中提取的任何更新都不会立即集成到您的活动分支中。

版本控制系统是关于掌握数据变化的复杂性(因为并行任务和/或并行工作在一个任务上),以及您与其他人(其他任务和/或其他人)协作的方式是完全不同的在CVCS和DVCS之间。

TFS(Team Foundation Server)是一个项目管理系统,包括CVCS:Team Foundation Version Control(TFVC),以“工作项目”的概念为中心。
它的集中方面强制实现一致性(除了源之外的其他元素)
另请参阅此VSS to TFS document,其中说明了如何使其适应可以访问一个参考的团队 一个参考意味着它更容易维护(无需执行同步或数据刷新),因此管理的元素(任务列表,项目计划,问题和要求)数量更多。

答案 1 :(得分:12)

简单地说,集中式VCS(包括TFS)系统有一个中央存储,每个用户都可以访问这个位置。

在分布式VCS中,每个用户都有完整的存储库,可以进行更改然后同步到其他存储库,通常不需要服务器。

答案 2 :(得分:4)

结帐http://hginit.com。 Joel为Mercurial编写了一个很好的教程,这是一个DVCS。我之前没有读过关于DVCS的任何内容(我一直使用SVN),我发现它很容易理解。

答案 3 :(得分:3)

集中式VCS(CVCS)涉及与之交互的中央服务器。分布式VCS(DVCS)不需要集中式服务器。

DVCS签出是完整且独立的,包括存储库历史记录。 CVCS不是这种情况。

使用CVCS,大多数活动都需要与服务器进行交互。 DVCS不是这样,因为它们是“完整”的结账,回购历史和所有。

您需要写入权限才能提交到CVCS; DVCS的用户“拉”相互之间的变化。这导致更多的社交编码由GitHub和BitBucket等推动。

这些是一些相关的项目,毫无疑问还有其他项目。

答案 4 :(得分:1)

差异很大。

在分布式系统中,每个开发人员都在自己的沙箱中工作;他可以随心所欲地进行实验,只有在他的代码准备就绪时才会推送到“主”存储库。

在中央系统中,每个人都在同一个沙箱中工作。这意味着如果您的代码不稳定,则无法将其签入,因为您将破坏其他人的代码。

如果你正在开发一个功能,它自然需要一段时间才能稳定下来,而且因为你承担不起任何不稳定代码的负担,你会坐下来进行修改直到它们稳定。这使得开发真的很慢,特别是当你有很多人在这个项目上工作时。你只是不能轻易添加新功能,因为你有这个稳定问题,你希望主干中的代码稳定,但你不能!

对于分布式系统,因为每个开发人员都在他自己的沙箱上工作,所以他不需要担心弄乱别人的代码。并且因为这些系统往往非常善于合并,所以您仍然可以使代码库与主存储库保持同步,同时仍然在本地存储库中维护您的更改。

答案 5 :(得分:0)

我建议阅读Martin Fowler对Version Control Tools

的评论

简而言之,CVCS和DVCS之间的关键区别在于前者(以TFS为例)有一个中央代码库,在后一种情况下,有多个存储库,没有一个是“默认”中央一个 - 他们都是平等的。