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
获取)