我能理解为什么分布式版本控制系统(DVCS - 例如Mercurial)对于开源项目是有道理的。
但是对于企业来说,它们是否也有意义呢?(相比于像TFS这样的集中式版本控制系统)
一个DVCS具有哪些特点使其更适合或不适合拥有许多开发人员的企业使用呢?(相比于集中式系统)
我能理解为什么分布式版本控制系统(DVCS - 例如Mercurial)对于开源项目是有道理的。
但是对于企业来说,它们是否也有意义呢?(相比于像TFS这样的集中式版本控制系统)
一个DVCS具有哪些特点使其更适合或不适合拥有许多开发人员的企业使用呢?(相比于集中式系统)
集中化:分散模型有其优点(允许私人提交或在没有网络的情况下使用完整历史记录),但仍需要一组明确的集中化存储库,作为所有开发人员的主要参考。
身份验证:DVCS允许您将代码“签名”(提交)为...几乎任何人(作者“foo
”,电子邮件“foo@bar.com
”)。
您可以执行git config user.name foo
或git config user.name whateverNameIFeelToHave
,并在其中具有虚假名称的所有提交。
这与大型企业使用的唯一集中式“Active Directory”用户参考不相容。
授权:默认情况下,您可以克隆、推送或拉取任何存储库,并修改任何分支或任何目录。
对于敏感项目,这可能是一个阻碍问题(银行业通常非常保护某些定价或量化算法,需要非常少的人进行严格的读/写访问)
Git设置的答案是:
.
pull
(读取),而且还可以通过http执行push
(写入)。在Git层面上,认证部分也通过post-receive
钩子进行了加强,确保您推送到存储库中的至少有一个提交者名称等于通过shh或http协议检测到的用户名。
换句话说,您需要正确设置git config user.name
,否则您想要推送到中央存储库的任何推送都将被拒绝。
.
gitolite Perl脚本将解析一个简单的文本文件,其中设置了授权(所有存储库的读/写访问权限,或给定存储库中的分支的访问权限,甚至是存储库中目录的访问权限)。
如果git命令所需的访问级别不符合该文件中定义的ACL,则该命令将被拒绝。
.
在企业中,分布式源代码模型确实是有意义的,但它取决于团队的结构。
分布式源代码控制使您能够灵活地创建自己的工作流程。
想象一下,一个更大的团队,其中包括在单独的功能分支上工作的小团队。
这些都是您可以通过传统的集中式服务器实现的事情,但正如@Brook所指出的那样,集中式模型必须进行扩展,而分布式模型已经被分片,因此不需要(或至少需要较少)垂直扩展任何服务器。
http://msdn.microsoft.com/en-us/library/vstudio/fda2bad5(v=vs.110).aspx
我们团队在使用TFS约3年后切换到了Mercurial。HG的分支/合并支持比TFS好得多。这是因为DVCS依赖于无痛合并。