You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用GitHub API v4(GraphQL)获取指定仓库的贡献者数量?

如何用GitHub GraphQL API v4获取仓库的准确贡献者数量?

嘿,我来帮你搞定这个问题!你当前的查询是通过遍历提交记录提取作者,但这种方式存在两个核心问题:一是仅获取了master分支的前100条提交,会遗漏大量历史提交;二是同一个作者的多次提交会重复出现,无法直接得到去重后的贡献者总数。其实GitHub GraphQL API已经提供了更高效准确的方式,不用自己折腾提交遍历和去重逻辑。

正确的查询方案

GitHub的repository类型下内置了contributors字段,它会直接返回符合GitHub贡献规则的贡献者列表,并且自带totalCount字段给出准确的贡献者总数,同时支持分页获取所有贡献者的详情:

query ($owner: String!, $name: String!, $after: String) {
  repository(owner: $owner, name: $name) {
    contributors(first: 100, after: $after) {
      # 直接拿到贡献者的总数量
      totalCount
      pageInfo {
        hasNextPage
        endCursor
      }
      # 如果需要获取每个贡献者的详情,可以在这里加字段
      nodes {
        login
        name
      }
    }
  }
}

关键细节说明

  1. 直接获取总数:totalCount字段就是你要的准确贡献者数量,不需要自己统计节点数量,这是GitHub已经计算好的结果。
  2. 分页处理:如果需要获取所有贡献者的具体信息(比如登录名、名称),可以利用after变量和pageInfo的endCursor进行分页查询,每次最多取100条,直到hasNextPage为false。
  3. 贡献规则匹配:这个字段返回的贡献者是符合GitHub官方贡献认定规则的用户(比如提交到默认分支、通过PR合并的提交等),比你自己遍历所有提交统计的结果更贴合GitHub仓库页面显示的贡献者数据。

如果你需要统计所有提交过的作者(非GitHub标准贡献者)

如果你的需求是统计所有有过提交记录的作者(不管是否符合GitHub的贡献规则),那确实需要遍历所有提交,但得处理完整分页和去重:

  • 循环遍历提交历史,每次用endCursor取下一页,直到hasNextPage为false
  • 把所有作者的login或name存入一个集合(自动去重)
  • 最后集合的大小就是总数量

不过这种场景比较少见,绝大多数情况下,使用contributors.totalCount就足够满足需求了。

内容的提问来源于stack exchange,提问作者Diogo Duarte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:43:29