我想使用Github API列出特定提交中已修改的所有文件。这是一个我没有书面许可的公共回购。
我不希望将所有文件提交作为该提交的一部分,因为它可能(我不知道这是否属实)包含未更改的文件,它当然包含我在列表中特别不想要的已创建和已删除文件的名称。
最糟糕的情况是,如果我能够获得新的,已修改的,已删除的文件列表以及标识其状态的标记,以便在API调用之后在调用端过滤它们,我会没事的。
建议?
答案 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+"
}
]