Git 我怎样才能得到“的”呢;沙田;参数,而不下载整个文件?

Git 我怎样才能得到“的”呢;沙田;参数,而不下载整个文件?,git,github,Git,Github,我一直在尝试使用GithubAPI更新GitHub存储库中的一个文件,而该文件只有一个路径。我的计划是首先,获取如下所述的文件内容:,然后使用“sha”字段“更新文件” 正如这里的答案所描述的那样,它工作得很好 但是,使用GET/repos/:owner/:repo/contents/:path下载整个文件,作为返回的JSON中的一个字段,效率很低。因此,我的问题是:有没有一种方法可以只获取“sha”字段而不下载整个文件?您可以利用:从Blob的父树中检索有关Blob的一些元数据 例如,如果您使

我一直在尝试使用GithubAPI更新GitHub存储库中的一个文件,而该文件只有一个路径。我的计划是首先,获取如下所述的文件内容:,然后使用“sha”字段“更新文件”

正如这里的答案所描述的那样,它工作得很好


但是,使用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
头。