据我了解,当Git为文件分配一个SHA1哈希值时,这个SHA1对于该文件是基于其内容而言是唯一的。
因此,如果文件从一个存储库移动到另一个存储库,则该文件的SHA1保持不变,而其内容未更改。
Git如何计算SHA1摘要?它是否在完整的未压缩文件内容上做到这一点?
我想仿效在Git之外分配SHA1。
发布于 2018-03-22 14:58:46
这就是Git如何计算一个文件的SHA1(或者在Git中,是一个“blob”):
sha1("blob " + filesize + "\0" + data)
所以你可以在没有安装Git的情况下轻松地计算它。请注意,“\ 0”是空字节,而不是两个字符的字符串。
例如,一个空文件的散列:
sha1("blob 0\0") = "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"
$ touch empty
$ git hash-object empty
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
另一个例子:
sha1("blob 7\0foobar\n") = "323fae03f4606ea9991df8befbb2fca795e648fa"
$ echo "foobar" > foo.txt
$ git hash-object foo.txt
323fae03f4606ea9991df8befbb2fca795e648fa
这是一个Python实现:
from hashlib import sha1
def githash(data):
s = sha1()
s.update("blob %u\0" % len(data))
s.update(data)
return s.hexdigest()
发布于 2018-03-22 15:54:08
echo -en "blob ${#CONTENTS}\0$CONTENTS" | sha1sum
https://stackoverflow.com/questions/-100003665
复制相似问题