如何将GitSHA 1分配给没有Git的文件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

据我了解,当Git为文件分配一个SHA1哈希值时,这个SHA1对于该文件是基于其内容而言是唯一的。

因此,如果文件从一个存储库移动到另一个存储库,则该文件的SHA1保持不变,而其内容未更改。

Git如何计算SHA1摘要?它是否在完整的未压缩文件内容上做到这一点?

我想仿效在Git之外分配SHA1。

提问于
用户回答回答于

这就是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()
用户回答回答于

扫码关注云+社区