什么是分布式软件程序?以GIT为例

时间:2018-04-30 08:29:25

标签: git

我是GIT的新手,一直在努力了解它所基于的基本原理。这让我想到了分布式程序的概念。

为了让外行理解,我将尝试保持查询简单,保持以下内容 - 基于Web的分布式Porgram,例如GIT(我的理解是GIT是一个分发程序,如果有其他适当的例子,则是正确的)< / p>

我对分布式程序的基本了解是 - 它至少有两个节点,REMOTE和LOCAL。每个节点都具有与基础相同的父副本。如果GIT副本是CODE。

本地副本是我在计算机上的副本,而REMOTE是另一台计算机上网络上的其他地方。我的疑问基于这种理解:

  1. 如果我是第一次上传程序代码,它就会成为原始副本,对吧?此代码是否上传到GIT存储库,该存储库称为中央存储库并且位于Web上?或者只是存储的CODE及其ORIGIN(在本例中是我的LOCAL节点)的元数据。
  2. 如果网络中有人提取此原始副本,他们将创建一个REMOTE副本,对吧?为此,那时ORIGINAL计算机需要连接到互联网吗?我正在谈论第一份副本的案例。
  3. 如果(2)的答案为是,这意味着中央存储库只存储每个节点的元数据和每个VERSION更改的SOURCE更改的DIFF,是否正确?
  4. 如果3是肯定的话,那就意味着CENTRAL REPOSITORY需要始终在线,就像任何其他服务器一样。
  5. 请分享您的见解,并帮助纠正上述理解。

    谢谢, 阿南德

2 个答案:

答案 0 :(得分:0)

您的问题的答案:

  1. 上传存储库的完整副本。 (一个例外是钩子,仍然是本地的)
  2. 是的,你需要以某种方式连接(它可能是互联网,内联网或只是一个可移动的设备)
  3. 否。中央存储库包含存储库的完整副本
  4. 不,我不必总是在线。只有在想要推/拉时才需要它。即使让中央存储库100%在线也很常见。

答案 1 :(得分:0)

git是一个分布式源代码管理工具。为了理解在此上下文中分发的内容意味着将其与非分布式比较有帮助,例如。颠覆。

在subversion中有一个权威的中央存储库。如果您签出存储库,您只能获得一份工作副本(例如最新版本),但不会获得完整的历史记录,如果中央存储库已关闭,则无法提交其他版本。

相比之下,git至少从技术角度来看 - 没有中央存储库。因此,当您在git中签出存储库时,您将克隆完整的历史记录,并将所有内容提交到本地存储库。然后,您可以从其他存储库中提取和/或推送提交,以便同步更改并协同工作。

虽然通常情况下你在中心&#34;中有一个权威分支。存储库(例如,项目的公共GitHub存储库上的主分支),其中所需的更改将被合并,这只是适用于许多项目的常见做法。如果您有这样一个git存储库,那么您的原始数据库将会是#34;存储库(您初始化并添加第一个提交的位置)不必一直在线。另一方面,如果GitHub发生故障,每个节点都可以充当集线器,因为它具有或多或少完整的项目历史记录。

旁注:如果您将代码分支并提交到那些分支,那么&#34;原始&#34;代码与远程存储库分歧和相同。 GitHub和其他服务因此调用复制存储库分叉。

我建议Pro Git Book进一步阅读有关该主题的内容。如果您有时间,也可以查看Linus Torvalds on git