Git 我怎样才能得到“的”呢;沙田;参数,而不下载整个文件?
我一直在尝试使用GithubAPI更新GitHub存储库中的一个文件,而该文件只有一个路径。我的计划是首先,获取如下所述的文件内容:,然后使用“sha”字段“更新文件” 正如这里的答案所描述的那样,它工作得很好Git 我怎样才能得到“的”呢;沙田;参数,而不下载整个文件?,git,github,Git,Github,我一直在尝试使用GithubAPI更新GitHub存储库中的一个文件,而该文件只有一个路径。我的计划是首先,获取如下所述的文件内容:,然后使用“sha”字段“更新文件” 正如这里的答案所描述的那样,它工作得很好 但是,使用GET/repos/:owner/:repo/contents/:path下载整个文件,作为返回的JSON中的一个字段,效率很低。因此,我的问题是:有没有一种方法可以只获取“sha”字段而不下载整个文件?您可以利用:从Blob的父树中检索有关Blob的一些元数据 例如,如果您使
但是,使用GET/repos/:owner/:repo/contents/:path下载整个文件,作为返回的JSON中的一个字段,效率很低。因此,我的问题是:有没有一种方法可以只获取“sha”字段而不下载整个文件?您可以利用
:
从Blob的父树中检索有关Blob的一些元数据
例如,如果您使用存储库,并且希望从master
分支检索文件Lib/MoQ/MoQ.license.txt
的sha:
- 利用检索与
父目录匹配的树的内容Lib/MoQ
- 从返回的Json负载中检索blob的sha,其路径为
Moq.license.txt
- 确保对
段进行url编码,因为它包含正向斜杠:
- 语法:GET/repos///git/trees/url\u encode(:)
- 示例:
{
"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
}
或者做一个:
GET/repos/:owner/:repo/contents/:path
在文件路径上,然后从返回的数据中选择sha。执行HEAD请求而不是GET。它将sha作为
Etag
头返回。这可以用于获取GitHub私有repo中文件/目录的sha吗?@NickFernandez-是的,它也适用于私有repo。请注意,这个sha与Git sha无关。我无法尝试这样做。如果我的文件在根目录下,我应该有“trees/master:”?我尝试了所有合理的选择,但仍然得到“找不到”的答案。你有例子吗?如果文件内容低于1MB,这是否回答了你的问题?只有当文件小于1MB时,才会返回ETag
头。