我正在使用这个API来更新我的仓库中的文件,它要求我拥有一个有效的SHA blob以便于更新我想要更新的文件:
http://developer.github.com/v3/repos/contents/
我如何找到特定文件的SHA blob?假设在这里的测试帐户中的testrepo中,test.txt文件的SHA blob是什么?
非常感谢你!我正在使用这个API来更新我的仓库中的文件,它要求我拥有一个有效的SHA blob以便于更新我想要更新的文件:
http://developer.github.com/v3/repos/contents/
我如何找到特定文件的SHA blob?假设在这里的测试帐户中的testrepo中,test.txt文件的SHA blob是什么?
非常感谢你!更新文件的文档指定您需要提供要替换的文件的SHA。最简单的方法是也查询GitHub。例如:
> curl https://api.github.com/repos/testacc01/testrepo01/contents/test.txt
{
"name": "test.txt",
"path": "test.txt",
"sha": "4f8a0fd8ab3537b85a64dcffa1487f4196164d78",
"size": 13,
…
所以,您可以在JSON响应的“sha”字段中看到SHA是什么。 在您制定包含新版本的请求时,请使用该值。 成功更新文件后,文件将具有一个新的SHA,您需要在再次更新之前请求该新的SHA。(除非您的下一次更新在另一个分支上)如果您不想触发 API,可以自行生成 SHA。Git 通过将形式为 blob {content.length} {null byte}
的头和文件内容连接起来来生成 SHA。例如:
content = "what is up, doc?"
header = "blob #{content.bytesize}\0"
combined = header + content # will be "blob 16\u0000what is up, doc?"
sha1 = Digest::SHA1.hexdigest(combined)
来源: https://git-scm.com/book/zh/v2/Git-Internals-Git-Objects
以下是需要翻译的内容:{
repository(owner: "testacc01", name: "testrepo01") {
object(expression: "master:test.txt") {
... on Blob {
oid
}
}
}
}
import { Octokit } from "@octokit/rest";
const { data: { sha } } = await octokit.request('GET /repos/{owner}/{repo}/contents/{file_path}', {
owner: "owner-name",
repo: "repo-name",
file_path: "file-path-with-extension-from-root"
});