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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:34:27