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

如何编程获取GitHub用户完整仓库列表?API返回不全求助

如何用GitHub API拉取用户全部自建仓库

为啥用/users/{username}/repos拿不全仓库?

  • 这个接口默认仅返回30条结果,且存在分页限制,不遍历所有页面肯定拿不全
  • 如果目标仓库是私有仓库,不带认证token的话根本无法获取
  • 默认结果可能包含fork来的仓库,若只想看用户自建的,得加参数过滤

正确操作步骤:

  1. 处理分页:GitHub API采用分页返回机制,每页最多可设置返回100条(通过per_page=100参数),需循环请求直到返回空数组。可以通过递增页码,或检查响应头的Link字段判断是否还有下一页。
  2. 获取私有仓库:
    • 拉取自己的仓库:使用/user/repos接口,同时在请求头中添加带有repo权限的GitHub token(格式为Authorization: token 你的token),就能拿到所有私有+公开的自建仓库
    • 拉取他人的仓库:只能获取对方公开的自建仓库,私有仓库除非对方授权,否则无法获取
  3. 过滤自建仓库:添加type=owner参数,确保仅返回用户自己创建的仓库,排除fork而来的仓库

Python示例代码:

import requests

def fetch_all_owned_repos(username, token=None):
    all_repos = []
    page = 1
    per_page = 100
    headers = {"Authorization": f"token {token}"} if token else {}

    while True:
        # 拉取指定用户的自建仓库,带分页和类型过滤
        api_url = f"https://api.github.com/users/{username}/repos?per_page={per_page}&page={page}&type=owner"
        resp = requests.get(api_url, headers=headers)
        resp.raise_for_status()  # 处理请求错误
        current_page_repos = resp.json()
        if not current_page_repos:
            break  # 没有更多仓库了,退出循环
        all_repos.extend(current_page_repos)
        page += 1
    return all_repos

# 使用示例
target_user = "your-target-username"
github_token = "your-personal-access-token"  # 私有仓库需要这个
repos = fetch_all_owned_repos(target_user, github_token)
print(f"总共拿到 {len(repos)} 个自建仓库")

注意事项:

  • GitHub API有请求限额:未认证请求每小时最多60次,认证后每小时最多5000次,批量拉取时不要过于频繁,必要时可添加小延迟
  • 拉取自己的仓库时,使用/user/repos接口更省心,无需填写自己的用户名,还能确保拿到所有属于自己的仓库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:55:42