如何使用Github API列出git commit中所有已更改的文件

时间:2017-05-12 21:49:16

标签: github github-api

我想使用Github API列出特定提交中已修改的所有文件。这是一个我没有书面许可的公共回购。

我不希望将所有文件提交作为该提交的一部分,因为它可能(我不知道这是否属实)包含未更改的文件,它当然包含我在列表中特别不想要的已创建和已删除文件的名称。

最糟糕的情况是,如果我能够获得新的,已修改的,已删除的文件列表以及标识其状态的标记,以便在API调用之后在调用端过滤它们,我会没事的。

建议?

1 个答案:

答案 0 :(得分:1)

您可以使用GET /repos/:owner/:repo/commits/:sha获得单个提交,然后您可以使用jq处理它,例如,这会将修改后的文件打印为平面列表:

curl -s https://api.github.com/ENDPOINT | jq -r '.files | .[] | select(.status == "modified") | .filename'

但有一个重要的警告:这会过滤GET查询的结果,其中包含提交的全部内容,这可能是很多数据。我不知道你是否担心这个问题。我找了一种方法来过滤返回的字段,以避免使用不必要的带宽,但我在API中找不到。

如果您对JSON格式感兴趣,可以获得更多详细信息,如下所示:

curl -s https://api.github.com/ENDPOINT | jq '[.files | .[] | select(.status == "modified")]'

这将产生如下输出:

[
  {
    "sha": "564324525eb706f7cc2756ceef8b82cdfeaf270c",
    "filename": "README.md",
    "status": "modified",
    "additions": 1,
    "deletions": 0,
    "changes": 1,
    "blob_url": "https://github.com/janosgyerik/test1/blob/41885b6c8183de3ab5be02884fdcc37d920e41b9/README.md",
    "raw_url": "https://github.com/janosgyerik/test1/raw/41885b6c8183de3ab5be02884fdcc37d920e41b9/README.md",
    "contents_url": "https://api.github.com/repos/janosgyerik/test1/contents/README.md?ref=41885b6c8183de3ab5be02884fdcc37d920e41b9",
    "patch": "@@ -1,3 +1,4 @@\n test1\n =====\n nothing special\n+Sat May 13 00:16:02 CEST 2017"
  },
  {
    "sha": "37a26e04e6bdc55935e00f2a092d936240771aca",
    "filename": "index.html",
    "status": "modified",
    "additions": 1,
    "deletions": 0,
    "changes": 1,
    "blob_url": "https://github.com/janosgyerik/test1/blob/41885b6c8183de3ab5be02884fdcc37d920e41b9/index.html",
    "raw_url": "https://github.com/janosgyerik/test1/raw/41885b6c8183de3ab5be02884fdcc37d920e41b9/index.html",
    "contents_url": "https://api.github.com/repos/janosgyerik/test1/contents/index.html?ref=41885b6c8183de3ab5be02884fdcc37d920e41b9",
    "patch": "@@ -55,3 +55,4 @@\n </div>\n </body>\n </html>\n+"
  }
]