我刚刚阅读了Spolsky关于分布式与非分布式版本控制系统http://www.joelonsoftware.com/items/2010/03/17.html的最后一篇文章。这两者有什么区别?我们公司使用TFS。这个阵营到底是什么阵营?
答案 0 :(得分:31)
不同之处在于出版过程:
版本控制系统是关于掌握数据变化的复杂性(因为并行任务和/或并行工作在一个任务上),以及您与其他人(其他任务和/或其他人)协作的方式是完全不同的在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为例)有一个中央代码库,在后一种情况下,有多个存储库,没有一个是“默认”中央一个 - 他们都是平等的。