git分布的性质

git分布的性质,git,dvcs,Git,Dvcs,如果我执行以下操作且仅执行以下操作: 在我的电脑上创建个人回购(我们称之为a) 在服务器上创建裸回购(称之为B) 远程将裸回购添加到个人回购(即远程将B添加到A) 克隆B到第三台计算机(称之为新的个人回购C) 现在让我们设想服务器被破坏,因此B不再存在。在这个场景中,如果我从A推送更改,C仍然可以获取这些更改吗 或者换句话说,git是以“链接”的方式将更改推送到远程设备上,还是“集群”上的所有远程设备都相互了解?否。a将B列为远程设备,C将B列为远程设备,但他们彼此不了解。如果你销毁了B并且没有

如果我执行以下操作且仅执行以下操作:

  • 在我的电脑上创建个人回购(我们称之为
    a
  • 在服务器上创建裸回购(称之为
    B
  • 远程将裸回购添加到个人回购(即远程将
    B
    添加到
    A
  • 克隆
    B
    到第三台计算机(称之为新的个人回购
    C
  • 现在让我们设想服务器被破坏,因此
    B
    不再存在。在这个场景中,如果我从
    A
    推送更改,
    C
    仍然可以获取这些更改吗


    或者换句话说,git是以“链接”的方式将更改推送到远程设备上,还是“集群”上的所有远程设备都相互了解?

    否。
    a
    B
    列为远程设备,
    C
    B
    列为远程设备,但他们彼此不了解。如果你销毁了
    B
    并且没有在
    A
    中添加另一个遥控器,那么你就没有地方可以将
    A
    的更改推送到
    B

    首先,你从未将
    A
    的任何更改推送到
    B
    。因此,虽然
    A
    知道
    B
    B
    A
    一无所知,也不包含任何数据

    A
    推到
    B
    将从
    A
    起作用(因为
    A
    知道
    B
    )。数据将在
    B
    中结束。无论有多少其他回购协议知道
    B
    B
    都不会进一步推动这些变化。相反,其他回购协议将不得不从
    B
    中提取它们

    如果我们假设您至少从
    A
    推到
    B
    并克隆到
    C
    ,您可以将
    C
    作为远程添加到
    A
    ,然后推到它。但是
    C
    永远不会“神奇地”包含在其他回购协议之间推送的数据。只有当有人推送或从某处提取数据时,数据才会复制到回购协议中


    因此,对于每个操作,只涉及2个回购。

    否。“集群”中的每个客户机都是隔离的<如果没有
    B
    进行握手,code>A将永远无法看到在
    C
    上所做的更改。至少,我是这样理解的。[…]如果我从A推送更改,C仍然可以获取这些更改吗
    A
    不会知道
    C
    ,除非您将其作为前者的遥控器添加。请稍候,如果我将
    C
    作为遥控器添加到
    A
    ,那么当我从
    A
    推送时,更改是否会转到
    C
    ,而不必先取
    C
    ?是的。Git在回购协议之间绝对没有区别。你认为“
    B
    是一个服务器”和“
    C
    是另一个客户端”对它来说并不重要您还可以将
    A
    添加到
    C
    中,然后从
    C
    中拉/取,以获得与
    A
    上的
    git push C master
    完全相同的结果。这样,个人与裸机存储库不会改变存储库的推/拉行为吗?此外,我还认为如果不先获取,就永远不会得到推式更改?所有回购协议在获取/拉/推方面都是平等的。硬盘上的文件布局有时有点不同(裸repo不支持签出文件)。正如我所说,要传输数据,您必须以某种方式启动fetch/pull/push。按照操作定义的方向,在操作中涉及的两个回购之间复制数据。fetch/pull总是远程->本地,pull总是相反。最后,
    A
    上的
    git push C master
    C
    上的
    git fetch A master
    的操作相同。但两种方法中的一种通常要方便得多(当你坐在
    A
    前面时,使
    C
    获取)