如何用Python筛选GitHub Enterprise中无保护分支的仓库
解决GitHub Enterprise无保护分支仓库的审计问题
嘿,刚好我之前做过类似的GHE仓库分支审计,给你分享下怎么实现筛选完全没有保护分支的仓库!
核心逻辑其实很简单:既然GitHub API(包括GHE的)只会返回受保护的分支,那如果一个仓库的受保护分支列表是空的,就意味着这个仓库里没有任何分支被设置保护——这正是你要找的目标。
具体实现步骤(用PyGitHub)
假设你已经完成了GHE的认证初始化,直接上代码示例:
from github import Github # 初始化你的GHE实例(替换成你的实例地址和token) ghe = Github(base_url="https://your-ghe-domain/api/v3", login_or_token="your-personal-access-token") target_org = ghe.get_organization("your-target-org") # 用来存放符合条件的仓库 unprotected_repos = [] # 遍历组织内的所有仓库 for repo in target_org.get_repos(): # 获取该仓库的所有受保护分支(转成list方便判断长度) protected_branches = list(repo.get_protected_branches()) # 两个判断条件: # 1. 没有任何受保护分支 # 2. 仓库本身有至少一个分支(可选,避免把空仓库算进去) if len(protected_branches) == 0 and len(list(repo.get_branches())) > 0: unprotected_repos.append(repo.full_name) # 输出审计结果 print("=== 完全没有保护分支的仓库 ===") for repo_name in unprotected_repos: print(f"- {repo_name}")
关键细节说明
- 为什么用
get_protected_branches()? 比起逐个分支检查是否受保护,直接调用这个接口更高效——API只返回受保护的分支,空列表就代表全仓库无分支保护。 - 空仓库过滤:代码里加了
len(list(repo.get_branches())) > 0,如果你不需要排除空仓库,把这个条件去掉就行。 - 权限注意:确保你的token拥有
repo权限(针对私有仓库),或者至少有读取仓库分支保护配置的权限,不然会获取不到受保护分支数据,导致误判。
如果之前你的代码是逐个分支判断的话,换成这个逻辑能节省不少API调用次数,效率更高哦!
内容的提问来源于stack exchange,提问作者redhatter
相关产品推荐
相关产品推荐

