如何在不下载整个文件的情况下从GitHub API获取“sha”参数?

问题描述 投票:9回答:2

我一直在尝试使用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”字段?

git github
2个回答
10
投票

您可以利用<rev>:<path> extended SHA-1 syntax从其父树中检索有关Blob的一些元数据。

例如,如果您使用libgit2/libgit2sharp存储库,并且您想要从Lib/MoQ/Moq.license.txt分支检索文件master的sha:

  • 利用GitHub Trees API检索与Lib/MoQ父目录匹配的树的内容
  • 从返回的Json有效负载中检索blob的sha,其路径为Moq.license.txt
  • 确保url编码<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
投票

或者做一个:

GET / repos /:owner /:repo / contents /:path

在文件的路径上,然后从返回的数据中选择sha。

© www.soinside.com 2019 - 2024. All rights reserved.