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

如何通过GitHub API获取GitHub仓库的精确贡献者数量?

问题分析与解决方案

GitHub仓库页面显示的贡献者数量和REST API /contributors 端点返回的数量存在差异,核心原因是两者的统计逻辑完全不同,具体差异点和解决方法如下:

差异来源

1. PR合并方式的提交归因差异

当PR以** squash合并或变基合并**的方式被合并时,原PR作者的提交会被重写,git提交历史中的作者会变为执行合并的维护者。REST API的/contributors端点是基于原始git提交历史的作者统计,因此不会将原PR作者计入;但GitHub仓库页面的贡献者统计会识别这些PR的原作者,并将其纳入总数。

2. 匿名贡献者的覆盖范围不同

你添加的anon=true参数仅能包含使用未关联GitHub账号邮箱提交的匿名贡献者,但页面统计还会覆盖其他间接贡献场景:

  • 通过GitHub Web界面编辑文件、使用默认noreply邮箱提交的用户
  • 提交被维护者cherry-pick后,原作者仍被页面统计的情况

3. REST API的统计规则限制

REST API的/contributors端点默认仅统计有直接推送到仓库权限并产生提交的用户;而仓库页面的贡献者统计会包含所有发起过被合并PR的用户,即使他们没有仓库推送权限。

解决方案:使用GraphQL API获取与页面一致的统计

要得到和仓库页面完全一致的贡献者数量,需要使用GitHub的GraphQL API,它的统计逻辑和页面完全对齐。示例查询如下:

query {
  repository(owner:"Azure", name:"azure-sdk-for-go") {
    contributors(first: 1) {
      totalCount
    }
  }
}

你可以通过Python的requests库调用GraphQL API,示例代码如下:

import requests

def get_contributor_count(owner, repo):
    query = """
    query {
      repository(owner:"%s", name:"%s") {
        contributors(first: 1) {
          totalCount
        }
      }
    }
    """ % (owner, repo)
    response = requests.post(
        "https://api.github.com/graphql",
        json={"query": query},
        headers={"Authorization": "Bearer YOUR_GITHUB_TOKEN"}
    )
    return response.json()["data"]["repository"]["contributors"]["totalCount"]

print(get_contributor_count("Azure", "azure-sdk-for-go"))

注:需要替换YOUR_GITHUB_TOKEN为你的GitHub个人访问令牌(拥有仓库读取权限即可)。

内容的提问来源于stack exchange,提问作者Setu Kumar Basak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:35:28