如果我执行以下操作并且仅执行以下操作:
- 在我的 PC 上创建个人存储库(我们称之为
A
) - 在服务器上创建一个裸存储库(称之为
B
) - 将裸存储库远程添加到个人存储库(即远程将
B
添加到A
) - 将
B
克隆到第三台计算机(将此新的个人存储库命名为C
)
现在让我们想象一下服务器被破坏,因此 B
不再存在。在这种情况下,如果我从 A
推送更改,C
仍然可以获取这些更改吗?
或者换句话说,git 是否以“链接”方式将更改推送到 Remote ,或者“集群”上的所有 Remote 是否彼此了解?
最佳答案
首先,您从未将任何更改从 A
推送到 B
。因此,虽然 A
了解 B
,但 B
不了解 A
的任何信息,也不包含来自它。
从A
推送到B
可以从A
进行(因为A
知道B
)。数据最终会出现在 B
中。无论有多少其他存储库了解 B
,B
都不会进一步 push 更改。相反,其他存储库必须从B
中 pull 它们。
如果我们假设您至少从 A
推送到 B
并克隆到 C
一次,则可以添加 C
作为 A
的 Remote ,然后推送到它。但是 C 永远不会“神奇地”包含在其他存储库之间推送的数据。仅当有人推送数据或从某处提取数据时,数据才会复制到存储库中。
因此,对于每个操作,只涉及 2 个存储库。
关于git - git 分发的本质,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25935731/