【发布时间】:2015-03-24 05:32:14
【问题描述】:
我查看了here,但无法完全弄清楚我想知道的事情:git push 或 git pull 如何找出另一边缺少哪些提交对象?
假设我们有一个包含以下提交的存储库:(字母代表 SHA-1 ID,d 是 refs/heads/master)
a -> b -> c -> d
相比之下,遥控器有这些:
a -> e -> f -> g
根据 git 文档,遥控器会告诉我们它的 refs/heads/master 位于 g,但由于我们不知道该提交,因此实际上并没有告诉我们任何信息。这足以找出丢失的数据吗?
在另一个方向,文件说:
此时,fetch-pack 进程查看它拥有的对象,并通过发送“want”和它想要的 SHA-1 来响应它需要的对象。它发送 它已经拥有的所有对象 带有“have”,然后是 SHA-1。在此列表的末尾,它会写入“完成”以启动上传打包过程,以开始发送所需数据的打包文件:
这解释了远程如何确定要发送哪些数据,但这不会影响具有许多对象的存储库的拉取性能吗?否则,文中究竟是什么意思?
显然,数据传输的方式因方向而异(推与拉)。这种设计选择遇到了哪些挑战以及如何挑战,我如何理解文档中的描述?
【问题讨论】:
标签: git git-push git-pull git-fetch