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

如何通过Git REST API跨页拉取GitHub团队下的全量仓库

问题原因

这是GitHub REST API的默认分页规则导致的,所有列表类接口默认单页返回30条结果,没做分页处理的话,自然只能拿到第一页的30条数据。

解决方法

核心是按照API的分页规则遍历所有页,直到拉完所有数据,具体操作如下:

核心分页参数

调用接口时在URL后拼接两个查询参数控制分页:

  • per_page:指定单页返回的条目数,最大支持设置为100,设置为最大值可以减少总请求次数
  • page:指定当前请求的页码,从1开始计数

分页终止判断

不要自己硬编码页码,优先通过接口响应头的Link字段判断是否还有下一页:

GitHub列表类接口的响应头中,Link字段会标注分页导航关系,包含rel="next"标记时代表存在下一页,包含rel="last"标记时代表是最后一页。如果当前响应头里找不到rel="next"对应的链接,说明已经拉取到所有数据,可以终止请求。

如果不想解析响应头,也可以用兜底判断:当当前页返回的条目数小于你设置的per_page值时,说明已经到最后一页,但这个方法有概率出现最后一页条目数刚好等于per_page的边界情况,优先用Link头判断更稳妥。

实现步骤

  1. 初始化当前请求页码为1,创建空数组存储所有拉取到的仓库数据
  2. 构造请求地址,拼接per_page=100和当前page参数,首次请求示例:https://api.github.com/orgs/ORG/teams/TEAM/repos?per_page=100&page=1
  3. 发起请求,将当前页返回的仓库列表追加到总结果数组中
  4. 检查本次响应的Link头:
    • 存在rel="next"标记:页码加1,回到步骤2继续请求下一页
    • 不存在rel="next"标记:结束循环,此时总结果数组即为全量仓库数据

简化方案

如果你使用GitHub官方提供的Octokit系列SDK,不需要手动写分页循环,SDK内置了自动分页能力,开启对应配置后调用接口可直接返回全量数据。

注意事项
  • 不要将per_page设置为大于100的数值,API不会支持该设置,会自动回退到单页100条的规则
  • 所有请求建议携带合法的身份鉴权token,未认证的请求速率限制极低,且无法拉取团队下的私有仓库数据
  • 拉取大量数据时注意控制请求频率,避免触发速率限制导致请求被拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:18:15