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
相关产品推荐
相关产品推荐

