GitLab自托管V14.3.0如何批量修改多仓库保护分支合并权限
GitLab批量修改保护分支合并权限解决方案
你配置的群组级保护分支规则未生效是GitLab的默认逻辑,该规则仅对规则创建后新生成的子仓库生效,存量已创建的仓库不会自动同步规则,可通过GitLab Open API批量修改存量仓库配置,操作方法如下:
前置准备
- 登录GitLab进入「用户设置-访问令牌」页面,创建个人访问令牌(PAT),勾选
api权限域,确保该令牌对所有需要修改的仓库拥有Maintainer及以上权限 - 确认目标主群组ID(可在群组设置基础信息页查看)、需要修改的保护分支名称(如
main、master,支持通配符格式如release/*)
批量执行脚本(Python示例)
首先安装GitLab官方Python SDK:pip install python-gitlab
然后执行如下脚本:
import gitlab # 自定义配置项,替换为你实际的参数 GITLAB_URL = "你的GitLab自托管实例访问地址" PRIVATE_TOKEN = "你生成的个人访问令牌" TARGET_GROUP_ID = "目标主群组的数字ID" PROTECTED_BRANCH = "main" # 权限等级说明:30=Developer,40=Maintainer,设置为30即允许Developer+Maintainer合并 MERGE_ACCESS_LEVEL = 30 # 初始化GitLab客户端 gl = gitlab.Gitlab(GITLAB_URL, private_token=PRIVATE_TOKEN) # 拉取目标群组下所有仓库(包含子群组内的仓库) group = gl.groups.get(TARGET_GROUP_ID) projects = group.projects.list(all=True, include_subgroups=True) for p in projects: project = gl.projects.get(p.id) try: # 获取对应保护分支的现有配置 pb = project.protectedbranches.get(PROTECTED_BRANCH) # 更新合并权限 pb.allowed_to_merge = [{"access_level": MERGE_ACCESS_LEVEL}] pb.save() print(f"仓库[{project.name}]权限更新成功") except Exception as e: print(f"仓库[{project.name}]更新失败:{str(e)}")
注意事项
- 首次执行建议先在
projects = group.projects.list(...)代码后添加[:1],仅测试修改第一个仓库,确认权限配置符合预期后再执行全量更新 - 脚本执行完成后,后续新创建的子仓库会自动继承你已配置的群组级保护分支规则,无需再次手动调整
内容的提问来源于stack exchange,提问作者Rathore
相关产品推荐
相关产品推荐

