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

GitHub个人令牌为何无法获取他人共享的私有仓库列表?

问题根因

你选的接口错了。个人访问令牌(PAT)完全支持拉取你有权限访问的私有仓库,不需要换OAuth认证。

  • 你现在调用的/users/{USER}/repos接口,本身设计就只返回指定用户的公开仓库,哪怕带了认证头,也不会返回该用户的私有仓库、或是别人共享给你的私有仓库。
  • 他人共享给你的私有仓库,属于你作为协作者拥有访问权的资源,本来就不在「指定用户公开仓库列表」的返回范围内。
修复方案

更换正确接口

要拉取当前令牌对应账号有权限访问的所有仓库(包括你自己的私库、别人共享给你的协作者仓库、你有权限的组织私库),必须调用认证用户专属的仓库列表接口:
GET /user/repos

注意:路径里的user是固定字符串,不要替换成具体用户名,接口会自动根据传入的令牌匹配对应账号。

补全必要请求参数

调用时要加以下参数,否则会漏返回共享仓库:

  • affiliation:赋值为owner,collaborator,organization_member,覆盖默认仅返回自有仓库的逻辑,把你作为协作者、组织成员有权限的仓库都包含进来
  • per_page:赋值为100(接口支持的单页最大返回条数),同时记得处理分页,仓库数超过100时根据响应头的Link字段拉取后续页数据,避免漏数
  • type:赋值为all,确保私有仓库被返回

可直接运行的调用示例

headers = {
    "Accept": "application/vnd.github+json",
    "Authorization": f"Bearer {githubPersonalToken}",
    "X-GitHub-Api-Version": "2022-11-28"
}
params = {
    "per_page": 100,
    "affiliation": "owner,collaborator,organization_member",
    "type": "all"
}
response = requests.get("https://api.github.com/user/repos", headers=headers, params=params)
all_accessible_repos = response.json()

补充说明

  • 本地用不需要给令牌开全权限,只勾选repo权限组就足够完成拉取仓库列表、下载zip备份包的操作,最小权限配置能降低令牌泄露后的风险
  • 拿到仓库列表后,单个仓库的zip包下载接口路径为/repos/{仓库所有者名}/{仓库名}/zipball,直接发GET请求就能拿到对应仓库默认分支的压缩包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:15:39