如何通过GitHub API设置或检查仓库的「所有外部协作者都需审批」配置?
如何通过GitHub API设置或检查仓库的「所有外部协作者都需审批」配置?
我来帮你搞定这个问题!你提到的这个「所有外部协作者都需审批」的设置,对应的GitHub API端点其实藏在仓库的核心配置里,我给你一步步拆解操作方法:
一、检查单个仓库的当前设置
你可以通过GitHub REST API的仓库详情接口来查看这个配置状态:
- 调用
GET /repos/{owner}/{repo}接口(把{owner}换成仓库所有者,{repo}换成仓库名) - 在返回的JSON数据里,找到
require_external_collaborator_approval字段:true表示已开启该设置false表示未开启
举个curl命令的例子(记得替换成你的token和仓库信息):
curl -H "Authorization: Bearer 你的GitHub访问令牌" \ https://api.github.com/repos/用户名/仓库名
二、开启/关闭这个设置
如果要修改这个配置,用PATCH请求更新仓库设置即可:
调用 PATCH /repos/{owner}/{repo} 接口,在请求体里指定require_external_collaborator_approval的布尔值:
比如开启该设置的curl命令:
curl -X PATCH -H "Authorization: Bearer 你的GitHub访问令牌" \ -H "Content-Type: application/json" \ https://api.github.com/repos/用户名/仓库名 \ -d '{"require_external_collaborator_approval": true}'
要是想关闭,把true改成false就行。
三、批量排查未开启该设置的仓库
如果想批量找出所有没开这个设置的仓库,可以写个简单脚本遍历所有仓库,筛选出符合条件的:
下面是一个Python示例(需要安装requests库),以组织仓库为例(如果是个人仓库,把orgs换成user即可):
import requests # 替换成你的GitHub令牌和组织/用户名 TOKEN = "你的GitHub访问令牌" TARGET_OWNER = "你的组织名或用户名" headers = {"Authorization": f"Bearer {TOKEN}"} # 获取所有仓库(处理分页) all_repos = [] current_url = f"https://api.github.com/{'orgs' if '/' not in TARGET_OWNER else 'user'}/{TARGET_OWNER}/repos?per_page=100" while current_url: resp = requests.get(current_url, headers=headers) all_repos.extend(resp.json()) current_url = resp.links.get("next", {}).get("url") # 筛选未开启设置的仓库 missing_approval_repos = [] for repo in all_repos: repo_details = requests.get(repo["url"], headers=headers).json() if not repo_details.get("require_external_collaborator_approval", False): missing_approval_repos.append(repo["full_name"]) # 输出结果 print("未开启「所有外部协作者都需审批」的仓库列表:") for repo_name in missing_approval_repos: print(f"- {repo_name}")
注意事项
- 你的GitHub访问令牌需要有足够权限:如果操作私有仓库,需要
repo权限;公开仓库则需要public_repo权限。 - API调用要注意GitHub的速率限制,避免短时间内请求过多导致被限制。
备注:内容来源于stack exchange,提问作者KamilCuk
相关产品推荐
相关产品推荐

