假設用戶使用特定的散列下載git存儲庫修訂版。例如用這個命令:git clone --depth 1 --branch mybranch https://mygitserver.com/x.git && cd x && git checkout {hash}
。git客戶端是否可以保證內容完整性以抵禦受損的git服務器?
讓我們假設git服務器不可信,它可能會受到攻擊,以某種方式被黑客入侵。它可能試圖以某種惡意方式改變內容。
客戶端是否實際重新計算整個內容的散列值,並在散列錯誤的情況下失敗?
如果克隆很淺並且深度只有1,這意味着歷史記錄丟失。每個提交散列實際上是否包含整個源散列,或僅包含三角洲散列?看起來後者只是合理的,否則在深層歷史的情況下,它將不得不一遍又一遍地重新計算散列。
我懷疑它只是採用以前的散列,將最新的提交delta和元數據添加到它,並獲取最新的散列。代碼的哪些部分不會因最新的提交而改變?當客戶端以這種方式下載它們時,它們會計算出最新的散列嗎?
如果有人破壞了服務器,並對您的提交歷史記錄做了任何壞事,並替換了完整的git歷史記錄,您將永遠無法找到,除非您從其他源獲取並相互比較。你會得到一段歷史,你相信這段歷史,如果它完全被取代,你就無法弄清楚。 – ckruczek
小調:「hashtag」是Twitter上的事情,「hash」是Git所做的。 –