分布式版本控制系统真的没有集中存储库吗?
没有enforced中央存储库 - 这只是按照惯例。大多数项目do有一个中央存储库,但每个存储库都是平等的,因为它们具有完整的历史记录,并且可以在彼此之间推送和拉取补丁。
一种思考方式是,集中式 VCS 固定在星形拓扑中:一个中央集线器充当具有完整存储库的服务器,一个或多个客户端挂在其上。客户通常只有最近干净结帐的副本和有限的历史记录(如果有)。因此大多数操作都需要与服务器进行往返。分支是通过在一个存储库中创建分支来实现的。
在分布式 VCS 中,网络拓扑没有限制。理论上你可以拥有任何你喜欢的形状。您可以为每个团队或子项目拥有一个单独的存储库,并进行阶段提交。您可以拥有一个稳定的存储库和一个不稳定的存储库,以及许多功能分支,等等。并且不存在客户端/服务器的区别——所有节点都是平等的。每个存储库都是独立且完整的,并且可以从任何其他存储库推送和/或拉取更改。首先,您克隆现有存储库(制作您自己的副本以供工作),然后开始进行更改。一旦你进行了第一次提交,你实际上就拥有了一个分支。幸运的是,完成后通常很容易将更改合并回来。
但什么normally发生的情况是您有一个位于中央服务器上的存储库,这使人们更容易入门并跟踪最新更改的位置。
如何在没有服务器的情况下设置工作目录以供检出?
您的存储库必须从源树的某个位置开始。因此,始终存在第一个存储库,以及最初的一系列签入。假设您想从事以下工作Murky http://bitbucket.org/snej/murky/wiki/Home。你会clone存储库,它为您提供了自己的完整存储库,其中包含所有历史记录和签入。您进行一些更改(从而创建分支),完成后,将更改推回原处,并在其中合并。两个系统都充当对等体,并且它们在彼此之间推送和拉动变更集。
Mercurial 和 Git 都将存储库保存在隐藏的子目录中,因此一个目录树包含您的工作副本(可以处于您喜欢的任何状态)和存储库本身。
企业如何保存存储库的安全备份副本?
如上所述,您只需拥有一个指定的主存储库,其中包含所有最新合并的更改,并像其他任何内容一样对其进行备份。您甚至可以拥有多个备份存储库,或者在物理上独立的盒子上进行自动克隆。在某些方面,备份更容易。
我认为必须有一个中央仓库......但是它到底是如何“分布”的?我一直认为服务器-客户端 (SVN) 与点对点 (GIT) 的区别,但我不认为这是正确的,除非像 GIT 这样的工具依赖于 torrent 风格的技术?
它不是分布式的,因为不同的客户端有不同的部分,例如点对点文件共享。这实际上与中心化模型形成鲜明对比。
所有 DVCS 存储库都是一等公民。如何安排它们成为一个社会或管理问题,而不是一个技术问题。