如何在Bitbucket Pipeline中合并stag/prod分支时忽略指定文件并加手动审批
Bitbucket Pipeline 实现分支合并忽略指定文件的实践方案
核心思路
既然本地已经通过ours合并驱动实现了忽略指定文件的需求,在Bitbucket Pipeline中可以复用这个逻辑,结合Pipeline的手动审批步骤,完成自动化合并流程。
具体实现步骤
1. 配置仓库的.gitattributes文件
确保仓库根目录下的.gitattributes已经配置了需要忽略的文件/文件夹的合并策略,和本地保持一致:
buildspec.yml merge=ours appspec.yml merge=ours scripts/ merge=ours
这个配置会告诉Git在合并时,对于这些路径直接保留当前分支(prod分支合并时就是保留prod的版本)的内容,无需冲突处理。
2. 编写Bitbucket Pipeline配置文件(bitbucket-pipelines.yml)
配置触发条件、手动审批步骤以及合并逻辑:
pipelines: pull-requests: '**': - step: name: 预合并检查 script: - echo "执行代码检查、单元测试等预合并验证(可根据需求添加)" trigger: automatic - step: name: 等待手动审批 trigger: manual script: - echo "等待开发者审核通过后触发合并" - step: name: 执行合并并保留指定文件版本 script: # 克隆prod分支并拉取最新代码 - git clone -b prod $BITBUCKET_GIT_HTTP_ORIGIN prod-repo - cd prod-repo # 配置Git用户(Pipeline环境需要) - git config user.name "Bitbucket Pipeline" - git config user.email "pipeline@bitbucket.org" # 合并stag分支,利用.gitattributes的ours策略自动忽略指定文件 - git merge --no-ff $BITBUCKET_BRANCH # 推送合并后的prod分支 - git push origin prod
3. 流程验证
- 发起从
stag到prod的拉取请求,Pipeline会自动触发第一个预检查步骤; - 预检查通过后,进入手动审批环节,需要指定的开发者/负责人点击审批;
- 审批通过后,Pipeline执行合并步骤,Git会根据
.gitattributes的配置自动保留prod分支上buildspec.yml、appspec.yml和scripts文件夹的版本,合并stag分支的其他变更(比如commonfile.txt); - 合并完成后,prod分支会包含stag的非忽略文件变更,同时保留自身的指定文件版本。
注意事项
- 确保Pipeline的运行账号拥有仓库的读写权限,能够执行合并和推送操作;
- 如果预合并需要额外的验证(比如代码扫描、测试),可以在第一个步骤中添加对应的命令;
- 若合并过程中出现其他文件的冲突,需要在Pipeline中添加冲突处理逻辑,或者提前在PR中解决冲突后再触发合并。
内容的提问来源于stack exchange,提问作者Desh Deepak Dhobi
相关产品推荐
相关产品推荐

