Git/Azure Repos:存在release/*分支时能否阻止master分支提交?
阻止或警告master分支在release阶段的提交方案
服务器端:强制阻止向master提交
通过Git的pre-receive钩子可在服务器层面拦截所有向master分支的推送,当仓库中存在release/*分支时直接拒绝操作。
- 在Git服务器的目标仓库目录下,进入
hooks文件夹,创建pre-receive脚本(移除原有.sample后缀的同名文件):
#!/bin/bash # 检测是否存在远程release/*分支 has_release_branch=$(git branch -r | grep -E '^origin/release/') while read oldrev newrev refname; do target_branch=$(git rev-parse --symbolic --abbrev-ref "$refname") # 若推送目标是master且存在release分支,拒绝推送 if [ "$target_branch" = "master" ] && [ -n "$has_release_branch" ]; then echo "ERROR: 存在release/*分支,禁止向master提交代码。请完成release分支合并后再操作。" exit 1 fi done exit 0
- 给脚本添加执行权限:
chmod +x hooks/pre-receive
本地端:推送前给出警告提示
通过本地pre-push钩子,在开发者向master推送前触发警告,提醒当前处于release阶段不建议提交。
- 在本地仓库的
.git/hooks目录下创建pre-push脚本:
#!/bin/bash # 检测本地或远程是否存在release/*分支 has_local_release=$(git branch | grep -E '^release/') has_remote_release=$(git branch -r | grep -E '^origin/release/') current_branch=$(git rev-parse --abbrev-ref HEAD) if [ "$current_branch" = "master" ] && ([ -n "$has_local_release" ] || [ -n "$has_remote_release" ]); then echo "WARNING: 当前存在release/*分支,不建议向master提交代码。请确认操作必要性。" # 若需要强制阻止本地推送,取消下方注释 # exit 1 fi exit 0
- 给脚本添加执行权限:
chmod +x .git/hooks/pre-push
托管平台补充方案
如果使用GitLab、GitHub等托管平台,可结合分支保护规则与CI/CD流水线实现:
- 开启master分支的PR合并强制规则,禁止直接推送
- 在PR合并前添加检查步骤:检测仓库中是否存在
release/*分支,若存在则标记PR为不可合并状态
内容的提问来源于stack exchange,提问作者DaveVentura
相关产品推荐
相关产品推荐

