git - git 分发的本质

标签 git dvcs

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

  1. 在我的 PC 上创建个人存储库(我们称之为 A)
  2. 在服务器上创建一个裸存储库(称之为 B)
  3. 将裸存储库远程添加到个人存储库(即远程将 B 添加到 A)
  4. B 克隆到第三台计算机(将此新的个人存储库命名为 C)

现在让我们想象一下服务器被破坏,因此 B 不再存在。在这种情况下,如果我从 A 推送更改,C 仍然可以获取这些更改吗?

或者换句话说,git 是否以“链接”方式将更改推送到 Remote ,或者“集群”上的所有 Remote 是否彼此了解?

最佳答案

首先,您从未将任何更改从 A 推送到 B。因此,虽然 A 了解 B,但 B 不了解 A 的任何信息,也不包含来自它。

A推送到B可以从A进行(因为A知道B)。数据最终会出现在 B 中。无论有多少其他存储库了解 BB 都不会进一步 push 更改。相反,其他存储库必须B pull 它们。

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

因此,对于每个操作,只涉及 2 个存储库。

关于git - git 分发的本质,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25935731/

相关文章:

python - alembic 修订 - 多头(由于分支)错误

git - 该树包含一个具有无效路径 '.git' 的条目

mercurial - 直接开发到中央存储库,或者不

git - Git 是用于企业项目 Web 开发(HTML/CSS/Javascript)的良好版本控制系统吗?

初始提交的 GitHubs 流程

Gitolite 在本地主机上询问 git ssh 密码

eclipse - 在 Eclipse IDE 的 EGit 中提交时选择较早的提交消息?

version-control - 在不实际拉取的情况下检测父存储库和分支之间的冲突

Netbeans/Mercurial - 在 "Team -> Share"菜单下定义多个推/拉存储库?

git - 源分支落后于目标分支 n 次提交