如何快速获取GitHub组织下所有仓库的总提交数?
高效统计GitHub组织全仓库提交数的替代方案
1. 优先用GitHub GraphQL API批量查询
这是效率最高的方案,GraphQL允许你在单次请求中拉取组织下多仓库的提交统计,彻底避免逐个调用REST接口的低效问题。
示例查询(替换成你的组织名称):
query { organization(login: "YourOrgName") { repositories(first: 100) { nodes { name defaultBranchRef { target { ... on Commit { history { totalCount } } } } } pageInfo { endCursor hasNextPage } } } }
这个查询会返回组织下前100个仓库的名称,以及对应默认分支的总提交数。如果仓库数量超过100,利用pageInfo里的endCursor参数做分页查询即可。调用时需要携带拥有repo权限的GitHub令牌,你可以用curl、GraphQL Explorer或者任何HTTP客户端发起请求。
2. 用GitHub CLI结合并行处理提速
如果不想写GraphQL,用GitHub CLI(gh)配合shell工具也能比逐个调用REST快不少:
- 先导出组织所有仓库列表:
gh repo list YourOrgName --limit 1000 --json name > repos.json
- 用xargs并行查询(-P参数控制并发数,避免触发API限制):
jq -r '.[].name' repos.json | xargs -P 8 -I {} gh api repos/YourOrgName/{}/commits --header "Accept: application/vnd.github.v3+json" --jq '"{}: \(.total_count)"'
注意:GitHub API有请求频率限制,并发数别设太高,一般8-10比较稳妥。
3. 本地克隆仓库后离线统计
如果需要频繁统计,建议一次性克隆组织所有仓库到本地,之后定期拉取更新,用git命令快速统计:
# 批量克隆组织仓库(--parallel开启并行克隆) gh repo clone YourOrgName/* --parallel # 遍历统计每个仓库提交数 for dir in */; do repo_name=${dir%/} commit_count=$(git -C "$dir" log --oneline | wc -l) echo "$repo_name: $commit_count" done
这种方式适合长期统计需求,本地缓存后每次统计几乎无网络开销。
内容的提问来源于stack exchange,提问作者Diong
相关产品推荐
相关产品推荐

