首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用python中的Github从字符串中计算SHA?

如何使用python中的Github从字符串中计算SHA?
EN

Stack Overflow用户
提问于 2016-10-05 12:06:08
回答 2查看 2K关注 0票数 2

我想用Github更新一个文件,并将它提交到一个分支中。我很难做出承诺。SHA与预期的不匹配。

代码语言:javascript
运行
复制
{
    'documentation_url': 'https://developer.github.com/enterprise/2.7/v3/repos/contents/',
    'message': 'pom.xml does not match de42fdd980f9b8067a2af982de46b8d5547e4597'
}

我所做的工作如下:

代码语言:javascript
运行
复制
import hashlib
myfile = "new content of my README"
resulting_file = base64.b64encode(bytes(myfile, "utf-8"))
file_as_str = str(resulting_file.decode('utf-8'))
sha = hashlib.sha1(file_as_str.encode('utf-8')).hexdigest()

url = 'https://someurl.com/someproject/contents/README.md?access_token=' + access_token
data = '{"message": "bla bla", "content": "'+file_as_str+'", "sha": "'+sha+'", "branch": "'+branch+'"}'
response = requests.put(url, data=data)

我不想使用lib来更好地理解正在发生的事情。可能SHA没有正确生成,但我无法确定原因。有人能帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-05 13:10:35

您不需要计算新文件的SHA。相反,您必须提供要替换的文件的SHA。您可以通过使用获取内容对文件执行requests.get()来获得此结果。

代码语言:javascript
运行
复制
url = 'https://api.github.com/repos/someowner/someproject/contents/pom.xml'
r = requests.get(url)
sha = r.json()['sha']

然后使用sha请求中的PUT值更新文件:

代码语言:javascript
运行
复制
with open('myfile', 'rb') as f:
    content = str(base64.b64encode(f.read()), encoding='utf8')
    data = {'message': 'bla bla', 'content': content, 'sha': sha, 'branch': branch}
    r = requests.put(url, json=data)
票数 6
EN

Stack Overflow用户

发布于 2016-10-05 12:40:05

GitHub按以下方式计算散列:

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

因此,请使用以下代码:

代码语言:javascript
运行
复制
with open(filepath, 'rb') as file_for_hash:
    data = file_for_hash.read()
    filesize = len(data)
sha = hashlib.sha1("blob " + filesize + "\0" + data).hexdigest()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39873507

复制
相关文章

相似问题

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