【发布时间】:2017-06-14 04:39:40
【问题描述】:
假设用户下载了带有特定哈希的 git 存储库修订版。例如使用此命令:git clone --depth 1 --branch mybranch https://mygitserver.com/x.git && cd x && git checkout {hash}。
让我们假设 git 服务器不可信,它可能会受到损害,以某种方式被黑客入侵。它可能试图以某种恶意方式更改内容。
客户端是否真的重新计算整个内容的哈希值并在哈希错误的情况下失败?
如果克隆很浅并且只有depth=1,这意味着历史丢失了。每个提交哈希实际上是否包含整个源哈希,还是仅包含增量哈希?似乎后者只是合理的,否则在历史悠久的情况下,它将不得不一遍又一遍地重新计算哈希。
我的怀疑是它只需要以前的哈希,向其中添加最新的提交增量和元数据,然后获取最新的哈希。最新提交未更改的代码部分呢?当客户端以这种方式下载它们时,它们是否会考虑到计算的最新哈希值?
【问题讨论】:
-
如果有人破坏了服务器并对你的提交历史做了任何坏事并替换了完整的 git 历史,除非你从其他来源提取并相互比较,否则你永远不会发现。你得到一个历史并且你相信这个历史,如果它被完全替换了,你就无法弄清楚。
-
一个小提示:“hashtag”是 Twitter 上的东西,“hash”是 Git 所做的。
标签: git