Git中ls-tree显示的blob对象SHA是否不唯一?
为什么不同Git文件会有相同的SHA值?
这其实是Git的正常设计,完全不用担心!
Git里的blob对象(用来存储文件内容的对象)的SHA-1值,是根据文件的实际内容计算出来的,和文件名、存储路径这些信息完全无关——文件名是被存在tree对象里的,不属于blob的一部分。
所以只要两个文件的内容100%完全一致,它们对应的blob对象就会是同一个,SHA值自然也一模一样。Git这么做是为了节省存储空间,避免重复存储相同的内容,是个很实用的优化机制。
拿你给出的例子来说:
exp2f-inputs和expf-inputs的内容肯定完全相同fmaxf-inputs和fminf-inputs同理log2f-inputs和logf-inputs也是内容一致
你可以自己验证一下:用命令git cat-file -p fc47072354934eb062321af9d1c4897244562b67查看这个SHA对应的内容,再对比这两个文件的本地内容,就能确认它们是完全一样的。
简单来说,Git对象的SHA唯一性是针对对象自身的内容的:同一个内容只会有一个SHA,不同文件名但内容相同的文件共享blob是合理且正常的特性,不是问题哦。
内容的提问来源于stack exchange,提问作者Mas Bagol
相关产品推荐
相关产品推荐

