我想知道如何通过GitHub API获取文件的所有提交/版本(即提交/版本的内容)。
我想到了一种方法,这相当于this other question的答案。
问题是这使用"内容" 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?
答案 0 :(得分:2)
get content API确实允许传递SHA1:
GET https://api.github.com/repos/:owner/:repo/contents/:FILE_PATH?ref=SHA
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提及in the comments:
我最终使用树API进行了类似的操作 具体来说,我得到了一个文件的所有提交。然后我尝试使用内容API来获取每次提交的文件内容 如果失败(即大小超过1 MB,所以我需要使用blob API),我从提交中获取文件的树URL(即Perl:
$commit_tree_url = $commit_info->{'commit'}->{'tree'}->{'url'}
)。
然后我获取$commit_tree_url
并在文件的结果中找到正确的树记录 - 这将有一个'url'哈希值,可用于通过blob API获取文件内容。