我目前正在使用GitHub API v3编写一个小项目。
我一直在根据repo包含的分支数进行计算。在没有请求list all the branches of that repo的情况下,我似乎找不到办法。需要请求repo的分支会增加不必要的运行时间,特别是在处理数百个repos时,每个repos包含数十个分支。
明显缺乏这样做的能力让我感到意外,因为通过这样做可以轻松获得一个非常相似的操作,获得组织的回购数量:
GET https://api.github.com/orgs/cloudify-cosmo
,使用正确的GitHub authentication credentials。public_repos
和total_private_repos
的字段那么,我错过了什么吗?是否有一种类似方便的方式(或任何方式)获得回购的分支数量而不必列出其分支?
答案 0 :(得分:6)
目前没有这样的属性。
但是,您可以使用一个巧妙的技巧来避免获取所有页面。如果您将per_page
设置为1
,那么每个页面将包含1个项目,页面数量(由最后一页显示)也会告诉您项目总数:
https://developer.github.com/v3/#pagination
因此,只需一个请求 - 您就可以获得分支总数。例如,如果您获取此URL并检查链接标头:
https://api.github.com/repos/github/linguist/branches?per_page=1
然后您会注意到Link
标题是:
Link: <https://api.github.com/repositories/1725199/branches?per_page=1&page=2>; rel="next", <https://api.github.com/repositories/1725199/branches?per_page=1&page=28>; rel="last"
这告诉你有28页的结果,因为每页有一个项目 - 分支的总数是28.
希望这会有所帮助。
答案 1 :(得分:0)
我基于Avia的Answer创建了一个简单的电源外壳实用程序。希望将来对某人有帮助。尽管它具有强大的功能,但也可以采用任何其他语言。
#$response = Invoke-WebRequest -Uri https://api.github.com/repos/github/linguist/branches?per_page=1
$response = Invoke-WebRequest -Uri https://api.github.com/repos/angular/angular/branches?per_page=1
#https://github.com/angular/angular
$numberOfBranchesString = $response.Headers.link.Split(";")[1].Split(",")[1].Split("&")[1].Split("=")[1];
$numberOfBranches = $numberOfBranchesString.Substring(0, $numberOfBranchesString.length-1);
$numBranch = $numberOfBranches -as [int];
$loopToRunBranch = $numBranch/10 + 1
$remainingBranches = $numBranch%10;
for($i=0; $i -lt $loopToRunBranch; $i++) {
if($i -lt $loopToRunBranch -1 ) {
# $response = Invoke-WebRequest -Uri "https://api.github.com/repos/github/linguist/branches?per_page=10"
$response = Invoke-WebRequest -Uri "https://api.github.com/repos/angular/angular/branches?page=$($i+1)&per_page=10"
echo $response
}
else {
$remainingBranches = $numberOfBranches%10
# $response = Invoke-WebRequest -Uri "https://api.github.com/repos/github/linguist/branches?per_page=$remainingBranches"
$response = Invoke-WebRequest -Uri "https://api.github.com/repos/angular/angular/branches?page=$($i+1)&per_page=$remainingBranches"
echo "$i from Else $response"
}
}```