首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将GitSHA 1分配给没有Git的文件?

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

Stack Overflow用户
提问于 2018-03-22 06:44:36
回答 2查看 0关注 0票数 0

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

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

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

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

EN

Stack Overflow用户

发布于 2018-03-22 14:58:46

这就是Git如何计算一个文件的SHA1(或者在Git中,是一个“blob”):

代码语言:javascript
复制
sha1("blob " + filesize + "\0" + data)

所以你可以在没有安装Git的情况下轻松地计算它。请注意,“\ 0”是空字节,而不是两个字符的字符串。

例如,一个空文件的散列:

代码语言:javascript
复制
sha1("blob 0\0") = "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"

$ touch empty
$ git hash-object empty
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391

另一个例子:

代码语言:javascript
复制
sha1("blob 7\0foobar\n") = "323fae03f4606ea9991df8befbb2fca795e648fa"

$ echo "foobar" > foo.txt
$ git hash-object foo.txt 
323fae03f4606ea9991df8befbb2fca795e648fa

这是一个Python实现:

代码语言:javascript
复制
from hashlib import sha1
def githash(data):
    s = sha1()
    s.update("blob %u\0" % len(data))
    s.update(data)
    return s.hexdigest()
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档