Web Services 使用GitHub blob api获取文件的所有版本

1wnzp6jl  于 2022-11-15  发布在  Git
关注(0)|答案(1)|浏览(128)

我想知道如何通过GitHub API获取文件的所有提交/版本(即提交/版本的内容)。
我想出了一个方法,它相当于另一个问题的答案。
问题是它使用了“contents”API,每个文件的上限为1 MB(如果尝试访问大于1 MB的文件,则会收到以下错误消息:“This API returns blobs up to 1 MB in size. The requested blob is too large to fetch via the API, but you can use the Git Data API to request blobs up to 100 MB in size.“)
因此,要获取大于1 MB(最大100 MB)的文件,您需要使用“blob”API,但我不知道如何以与内容API相同的方式使用它。
也就是说,给定一个文件的特定提交,如何使用“blob”API获取该文件的内容?

polhcujo

polhcujo1#

获取内容API确实允许传递SHA1:

GET https://api.github.com/repos/:owner/:repo/contents/:FILE_PATH?ref=SHA

注:GitHub内容API现在(2022年5月)support up to 100MB files
Blob API还使用SHA1:

GET /repos/:owner/:repo/git/blobs/:sha

但是您需要首先获得所需文件的SHA1。
请参见“How do I get the “sha” parameter from GitHub API without downloading the whole file?“,使用Get Tree API作为父文件夹。

GET /repos/<owner>/<repo>/git/trees/url_encode(<branch_name>:<parent_path>)

'url_encode(<branch_name>:<parent_path>)'表示<branch_name>:<parent_path>必须是url encoded
树的结果将为您提供您正在查找的文件的SHA1。
OP buddyroo30在评论中提到:
最后我使用树API做了类似的事情。
具体来说,我获取一个文件的所有提交,然后尝试使用contents API获取每个提交的文件内容。
如果失败(即大小超过1 MB,因此我需要使用blob API),我将从文件的提交中获取文件的树URL(即在Perl中:$commit_tree_url = $commit_info->{'commit'}->{'tree'}->{'url'})的数据。
然后我获取$commit_tree_url并在结果中找到文件的正确树记录---这将有一个“url”哈希值,可用于通过blob API获取文件内容。

相关问题