GitHub API - 获取repo的分支数量而不列出其所有分支

时间:2015-10-20 17:05:08

标签: github-api

我目前正在使用GitHub API v3编写一个小项目。

我一直在根据repo包含的分支数进行计算。在没有请求list all the branches of that repo的情况下,我似乎找不到办法。需要请求repo的分支会增加不必要的运行时间,特别是在处理数百个repos时,每个repos包含数十个分支。

明显缺乏这样做的能力让我感到意外,因为通过这样做可以轻松获得一个非常相似的操作,获得组织的回购数量:

  1. Get an organization。例如GET https://api.github.com/orgs/cloudify-cosmo,使用正确的GitHub authentication credentials
  2. 假设验证成功,在响应正文中有两个名为public_repostotal_private_repos的字段
  3. 要获取repos的数量,只需添加这两个字段的值。
  4. 那么,我错过了什么吗?是否有一种类似方便的方式(或任何方式)获得回购的分支数量而不必列出其分支?

2 个答案:

答案 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"
    }

}```