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

如何在Azure DevOps中默认禁止所有仓库main分支强制推送,保留普通推送权限

解决方案:Azure DevOps项目级批量配置main分支禁止强制推送

可以实现你的需求,核心是通过项目级分支权限模板批量配置现有仓库,并让新建仓库自动继承规则,同时不启用分支保护策略(保留直接推送main的权限)。具体步骤如下:

1. 调整项目级全局权限

首先确保团队在项目层面拥有所有分支的强制推送权限,之后单独覆盖main分支的规则:

  • 进入项目设置 → 权限 → 找到你的团队用户组
  • 在「Git仓库」权限分类中,将**强制推送(所有分支)**设置为「允许」,确保除main外的分支默认能自由强制推送
  • 其他核心权限(如「推送」)保持「允许」,满足直接提交main分支的需求

2. 创建项目级分支权限模板(自动应用到新建仓库)

这个模板会让所有新建仓库的main分支自动禁用强制推送:

  • 进入项目设置 → 仓库 → 分支权限模板 → 点击「新建模板」
  • 模板名称设为「Main分支禁止强制推送」,分支模式填写refs/heads/main(匹配所有仓库的main分支)
  • 在权限设置中找到你的团队组,将强制推送权限设为「拒绝」,其余权限保持默认
  • 保存后,将该模板设置为项目的默认分支权限模板,后续新建仓库会自动套用此规则

3. 批量更新现有仓库的main分支权限

用Azure DevOps CLI批量处理现有仓库,避免手动逐个配置:

  1. 先登录Azure DevOps CLI:
    az devops login
    
  2. 运行以下脚本遍历项目下所有仓库,批量设置main分支的强制推送拒绝权限:
    # 替换为你的项目名称和团队组名称
    PROJECT_NAME="你的项目名"
    TEAM_GROUP="你的团队组名"
    
    az repos list --project "$PROJECT_NAME" --query "[].name" -o tsv | while read REPO_NAME; do
        az repos permission update \
            --project "$PROJECT_NAME" \
            --repository "$REPO_NAME" \
            --branch main \
            --group "$TEAM_GROUP" \
            --permission-id 12 \
            --deny
    done
    
    注:权限ID 12对应「强制推送」权限,可通过az repos permission list --permission-name "Force push"确认

4. 验证配置效果

  • 测试强制推送main分支:执行git push --force origin main会被权限拒绝
  • 测试常规推送main分支:直接git push origin main可以正常提交(如README修改)
  • 测试特性分支强制推送:在任意非main分支执行git push --force origin feature/xxx可成功
  • 测试新建仓库:创建新仓库后,查看main分支权限,确认强制推送已被拒绝

内容的提问来源于stack exchange,提问作者Cristian Sanchez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:05:11