Github api 完成对给定存储库分支的所有提交
Github api to get all the commits done to given repository branch
我正在尝试使用 github api 获取存储库 test
的 develop
分支的所有提交,但无论我如何,我总是获得第一页传递查询参数。不确定我发送的请求有什么问题。
curl -u username:$token -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/ORGANIZATION_NAME/test/commits/develop
我总是获得第一页。我尝试使用给定的查询参数 here
您似乎访问了错误的端点。您要发送到的那个是 this one,您只收到一个提交(在您的情况下是最新的 develop
提交)。
您需要为您的应用实施一些分页逻辑并访问此端点:/repos/{owner}/{repo}/commits
。
例如,要获取开发分支的提交,您可以发送这样的请求:
curl -H "Authorization: XYZ" -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/ACCNAME/REPO/commits\?sha\=develop
(如果你使用 octokit,它会更漂亮,但这只是一个例子:))
现在,为了进行分页,您还需要查询 per_page
和 page
参数并检查是否达到了限制。
基本上,使用以下查询:
curl -H "Authorization: XYZ" -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/ACCNAME/REPO/commits\?sha\=develop\&per_page\=X\&page\=Y
其中 X
和 Y
是您传递给 curl
请求的参数。收到响应后,您将检查数组的长度(因为您将获得一个提交数组)是否等于 X
。如果是,请执行另一个请求,但这次递增 Y+1
,这样您将获得下一页。循环执行此过程,直到您获得的响应 少于 比所需的 X
,因为这样您就会知道您会从您的存储库中获得最后一次提交。
节点中的示例(免责声明,未正确编写代码)
let allCommits = [];
let call = function(n, y) {
return new Promise((resolve, reject) => {
getCommits(function(statusCode, result) {
allCommits.push(result);
if (result.length === y) {
call(n + 1, y);
}
}, n, y);
});
};
如果 getCommits
是您从分支获取一系列提交的函数,path
定义为 path: '/repos/ACC_NAME/REPO/commits?sha=develop&page=' + n + '&per_page=' + y
,那么最后您将拥有所有页面在 allCommits
数组中提交。最后你只需要把它弄平,但是有更好的 js 技能的人可以提供更优雅的方法来做到这一点。
我正在尝试使用 github api 获取存储库 test
的 develop
分支的所有提交,但无论我如何,我总是获得第一页传递查询参数。不确定我发送的请求有什么问题。
curl -u username:$token -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/ORGANIZATION_NAME/test/commits/develop
我总是获得第一页。我尝试使用给定的查询参数 here
您似乎访问了错误的端点。您要发送到的那个是 this one,您只收到一个提交(在您的情况下是最新的 develop
提交)。
您需要为您的应用实施一些分页逻辑并访问此端点:/repos/{owner}/{repo}/commits
。
例如,要获取开发分支的提交,您可以发送这样的请求:
curl -H "Authorization: XYZ" -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/ACCNAME/REPO/commits\?sha\=develop
(如果你使用 octokit,它会更漂亮,但这只是一个例子:))
现在,为了进行分页,您还需要查询 per_page
和 page
参数并检查是否达到了限制。
基本上,使用以下查询:
curl -H "Authorization: XYZ" -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/ACCNAME/REPO/commits\?sha\=develop\&per_page\=X\&page\=Y
其中 X
和 Y
是您传递给 curl
请求的参数。收到响应后,您将检查数组的长度(因为您将获得一个提交数组)是否等于 X
。如果是,请执行另一个请求,但这次递增 Y+1
,这样您将获得下一页。循环执行此过程,直到您获得的响应 少于 比所需的 X
,因为这样您就会知道您会从您的存储库中获得最后一次提交。
节点中的示例(免责声明,未正确编写代码)
let allCommits = [];
let call = function(n, y) {
return new Promise((resolve, reject) => {
getCommits(function(statusCode, result) {
allCommits.push(result);
if (result.length === y) {
call(n + 1, y);
}
}, n, y);
});
};
如果 getCommits
是您从分支获取一系列提交的函数,path
定义为 path: '/repos/ACC_NAME/REPO/commits?sha=develop&page=' + n + '&per_page=' + y
,那么最后您将拥有所有页面在 allCommits
数组中提交。最后你只需要把它弄平,但是有更好的 js 技能的人可以提供更优雅的方法来做到这一点。