Azure分支策略配置:实现从B分支创建的PR默认合并到B
解决方案
GitHub 平台实现方法
1. 用 GitHub Actions 自动修正 PR 目标分支
在仓库根目录创建 .github/workflows/set-pr-target.yml 文件,内容如下:
name: Set PR Target Branch on: pull_request: types: [opened, reopened] jobs: set-target: runs-on: ubuntu-latest steps: - name: Check base branch of source branch id: check-branch run: | # 找出源分支基于哪个主分支创建 BASE_BRANCH=$(git show-branch --merge-base origin/${{ github.head_ref }} origin/master origin/XD_master | grep -E "(master|XD_master)" | head -n1 | sed 's/.*\[\(.*\)\].*/\1/') echo "base_branch=$BASE_BRANCH" >> $GITHUB_OUTPUT - name: Update PR target if needed if: steps.check-branch.outputs.base_branch == 'XD_master' && github.base_ref != 'XD_master' uses: actions/github-script@v6 with: script: | github.rest.pulls.update({ owner: context.repo.owner, repo: context.repo.repo, pull_number: context.issue.number, base: 'XD_master' })
这个工作流会在PR创建或重新打开时自动检查:如果源分支是基于XD_master创建的,但PR目标选成了master,就自动把目标分支改成XD_master。
2. 配合分支命名规则加约束
约定从XD_master拉的分支必须带xd-feature/、xd-fix/这类前缀,然后去仓库的Settings → Code and automation → Rulesets里加规则:
- 规则类型选Pull Request
- 条件设为源分支匹配
xd-* - 动作强制把目标分支设为
XD_master
GitLab 平台实现方法
1. 用 CI/CD 脚本修改 PR 目标
在 .gitlab-ci.yml 里加这个任务:
set_pr_target: stage: .pre rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' script: - | # 确定源分支的基准分支 BASE_BRANCH=$(git merge-base $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME master XD_master) if [[ "$BASE_BRANCH" == "XD_master" && "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "XD_master" ]]; then curl --request PUT --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ "$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID" \ --form "target_branch=XD_master" fi tags: - gitlab-runner
记得在项目的CI/CD变量里加GITLAB_TOKEN,这个 token 需要有修改合并请求的权限。
2. 用分支保护和模板
去项目设置 → 仓库 → 分支:
- 给
XD_master加分支保护规则,限制只有带指定前缀的分支能合并进来 - 用分支模板功能,从
XD_master创建新分支时,自动把PR目标设为XD_master
跨平台通用方案
- 定死分支命名规则:所有从
XD_master衍生的分支必须以xd-开头,从master来的分支用prod-前缀 - 写个Webhook脚本:监听PR创建事件,根据分支前缀自动改目标分支。脚本用Python或Node.js写就行,部署在自己服务器或者Serverless平台上。
额外提醒
- 自动化脚本需要有修改PR的权限,别忘配置对应token
- 可以在PR模板里加提示,明确不同分支该选哪个目标,帮团队成员少犯错误
- 定期检查脚本运行状态,避免失效
内容的提问来源于stack exchange,提问作者Simon Collatz
相关产品推荐
相关产品推荐

