我一直在尝试使用GitHub API更新GitHub存储库中的文件,同时只有该文件的路径。我的计划是第一次,获取如下所述的文件内容:https://developer.github.com/v3/repos/contents/,然后使用“sha”字段“更新文件”。
它的工作正常,正如答案How to find a Github file 's SHA blob中所述。
但是,使用GET / repos /:owner /:repo / contents /:path,将整个文件作为返回JSON中的字段下载,效率很低。所以,我的问题是:有没有办法在不下载整个文件的情况下获得“sha”字段?
答案 0 :(得分:10)
您可以利用<rev>:<path>
extended SHA-1 syntax 从其父树中检索有关Blob的一些元数据。
例如,如果您使用 libgit2/libgit2sharp 存储库,并且想要从Lib/MoQ/Moq.license.txt
分支检索文件master
的sha :
Lib/MoQ
父目录匹配的树的内容Moq.license.txt
<rev>:<path>
段进行网址编码,因为它包含正斜杠简而言之:
上面的示例链接将返回以下有效内容
{
"sha": "2f2c87728225f9cbb6e2d8c5997b6031e72ddca4",
"url": "https://api.github.com/repos/libgit2/libgit2sharp/git/trees/2f2c87728225f9cbb6e2d8c5997b6031e72ddca4",
"tree": [
{
"path": "Moq.dll",
"mode": "100644",
"type": "blob",
"sha": "bdd4235f215541017a9f37b6155f18e309573838",
"size": 659968,
"url": "https://api.github.com/repos/libgit2/libgit2sharp/git/blobs/bdd4235f215541017a9f37b6155f18e309573838"
},
{
"path": "Moq.license.txt",
"mode": "100644",
"type": "blob",
"sha": "c9216ccba318292d76fd308f232e7871bbbe77be",
"size": 1748,
"url": "https://api.github.com/repos/libgit2/libgit2sharp/git/blobs/c9216ccba318292d76fd308f232e7871bbbe77be"
},
{
"path": "Moq.xml",
"mode": "100644",
"type": "blob",
"sha": "160c1b5165fd967f4c79bc6043f0cc2ec28710d8",
"size": 314572,
"url": "https://api.github.com/repos/libgit2/libgit2sharp/git/blobs/160c1b5165fd967f4c79bc6043f0cc2ec28710d8"
}
],
"truncated": false
}
答案 1 :(得分:1)
或者做一个:
GET / repos /:owner /:repo / contents /:path
在文件的路径上,然后从返回的数据中选择sha。
答案 2 :(得分:-1)
执行 HEAD 请求而不是 GET。它将 sha 作为 Etag
标头返回。