git是怎么判断文件有没有修改的?
git吧
全部回复
仅看楼主
level 2
Lumen_Etoile 楼主
git是根据校验和是否相同来判断文件有没有修改吗?但如果是校验和判断的话,如果我修改了一个文件的内容,但是结果的校验和是相等的,是不是就git add不上去了?
2023年12月14日 02点12分 1
level 12
Git Objects 计算哈希使用的不知道是 SHA2-256 还是 SHA2-512 ,这个哈希算法发生第二原像攻击的概率存在但微乎其微,在多数情况下可以认为其不存在碰撞的可能。以 microsoft/winget-pkgs 这个接近14万的提交量,只需要不超过9位 Hash 值就能唯一区分 Commits ,所以不需要担心出现 add 不进去的情况。
2023年12月14日 04点12分 2
好的谢谢
2023年12月14日 05点12分
@Lumen_Etoile 我的问题,根据 Git 官网(https://suo.yt/QzvldFg)提到的内容,Git 会先获取一个文件的大小(按字节算),与文件原文一起按照特定格式拼接产生一个新的字节串。
2023年12月21日 13点12分
@Lumen_Etoile 对这个字节串计算 SHA-1 值,再用 Deflate 算法(ZIP 默认压缩算法)压一遍写入 ".git/objects/" 目录中与 SHA-1 值有关的一个子目录文件里。
2023年12月21日 13点12分
@Dragon1573 想要构造两个拼合的字节串 A 和 B 使得 SHA1(A) == SHA1(B) ,这个概率相当低,可以认为不存在你认为的这种 "git add" 失败可能。
2023年12月21日 13点12分
1