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

Pau*_*nel 1 python git github-api

我想用 Github API 更新一个文件并将其提交到一个分支中。我在创建提交时遇到了麻烦。SHA 与预期的不匹配。

{
    'documentation_url': 'https://developer.github.com/enterprise/2.7/v3/repos/contents/',
    'message': 'pom.xml does not match de42fdd980f9b8067a2af982de46b8d5547e4597'
}
Run Code Online (Sandbox Code Playgroud)

我执行以下操作:

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)
Run Code Online (Sandbox Code Playgroud)

我不想使用 lib 来执行此操作以更好地了解正在发生的事情。可能 SHA 未正确生成,但我无法确定原因。有人可以帮忙吗?

mha*_*wke 5

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

url = 'https://api.github.com/repos/someowner/someproject/contents/pom.xml'
r = requests.get(url)
sha = r.json()['sha']
Run Code Online (Sandbox Code Playgroud)

然后使用值shaPUT请求,以更新的文件:

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)
Run Code Online (Sandbox Code Playgroud)