为什么git被称为分布式源代码控制系统?

时间:2011-08-27 05:48:45

标签: git version-control dvcs

似乎在将代码提交到本地存储库后,每个程序员都会运行命令。

git push origin master

将本地文件推送到某个远程服务器。 除了本地副本之外,它与客户端/服务器模型没有什么不同,为什么它被称为“分布式”?

5 个答案:

答案 0 :(得分:8)

简答

  

除了本地副本之外,客户端/服务器模型没有什么不同,为什么它被称为“分布式”副本?

在下图中, alice david 可以互动,因为系统分布式

分布式版本控制

Distributed control

请注意, alice david 可以互动,因为每个人都可以充当服务器。

中央版本控制

Central control

这里开发团队只与主服务器交互。


长答案

传统上讲,源控制系统被设计为服务器 - 客户端设置,松散地说。因此,存储库位于集中位置。

使用git和Mercurial,该系统旨在使所有用户处于平等地位。 每个人都有完整的存储库。这种方式的控件和存储库是在其用户中分发

答案 1 :(得分:4)

CVS和SVN等工具提供了集中的存储库模型。每个人都将他们的更改提交到同一个中央存储库。每个提交者都保留最新版本的中央存储库的副本。当他们提交更改时,他们会将更改发送回主存储库。

此处的限制是您始终需要在本地存储库中拥有最新代码,并查看要求服务器获取该信息所需的更改历史记录。您还始终需要能够访问远程存储库以进行提交。

分布式SCN可以模拟此模型,但它提供了更多功能。每个提交者都有自己的存储库,而不仅仅拥有一个您发送更改的中央存储库,而该存储库具有项目的整个提交历史记录。您无需连接到远程存储库,更改只记录在本地存储库中。您仍然可以推送到集中式存储库,但不要需要

(来自:Travis Swicegood的Pragmatic Version Control using Git

这样做的一大好处是您可以随时在本地计算机上启动存储库。通常,当我开始一个新项目时,我git init并立即开始提交更新。稍后,如果我决定要与其他开发人员共享此项目,我可以轻松地设置一个我们都可以访问的集中式存储库。或者它可能永远不会离开我的计算机,但我会有本地版本控制,并且可以轻松查看我的提交历史记录。

另一个巨大的好处(现在可能不那么有云计算)是冗余。如果存储库的一个副本因任何原因丢失,则任何其他存储库都将包含完整的历史记录,因此您可能只会丢失自上次push以来的任何工作。

有关维基百科的更多信息:Distributed revision control

我也强烈推荐上面提到的关于Git的实用程序员书。

答案 2 :(得分:2)

它被称为分布式,因为每个git工作目录都包含一个包含树的完整历史记录的完整存储库。这也意味着您实际上不需要网络访问进行开发,因为您的树基本上可以是主树。

答案 3 :(得分:1)

因为您的克隆可能是其他人的主人,您可以将克隆推送到任何其他存储库。不需要一个“真正”主人的概念;您可以将其作为存储库的分布式网格运行。

答案 4 :(得分:0)

查看distribited system的定义并将其与Git所做/允许完成的内容进行比较......我认为这是一个匹配...客户端/服务器方法需要定义一个“权威/参考复制“与Git和类似的情况不同......