GitLab如何设置受保护分支正则格式限制仓库分支推送?
GitLab分支命名规范校验及推送拦截方案
先纠正你的误区:Protected Branches 不是干这个的
你用的「Protected branches > Protect a branch wildcard」是用来保护特定分支的(比如限制只有管理员能推送),它的作用是匹配现有分支并设置权限,不是用来拦截不符合规范的分支推送,所以显示0匹配很正常——仓库里没符合这个正则的现有分支,自然匹配不到。
正确实现分支校验的工具:Push Rules
要实现「阻止不符合命名规范的分支推送」,得用GitLab的Push Rules功能(需要仓库管理员权限),步骤如下:
- 进入仓库的「Settings > Repository」页面,往下翻找到Push rules区块
- 在Branch name输入框里填写正确的正则表达式——你之前写的
^(bug)?(release)?(feature)?/.*有问题,它允许空前缀(三个前缀都是可选的),没法满足「至少包含一种前缀」的要求,正确的正则应该是:
简单解释:^(bug|release|feature)/.*$^(bug|release|feature):分支名必须以bug、release、feature其中一个开头/:前缀后面必须跟斜杠(比如bug/fix-avatar这种格式).*$:斜杠后面可以跟任意内容,满足你自定义分支名的需求
- 保存设置后,所有不符合这个正则的分支推送都会被GitLab直接拒绝。
测试验证
- 本地创建符合规范的分支:
git checkout -b feature/add-pay,推送后正常生效 - 尝试创建不符合规范的分支:
git checkout -b test/temp,推送时会收到GitLab的错误提示,拦截推送
补充:如果要保护规范内的分支
如果需要对符合命名规范的分支设置权限(比如只有维护者能推送),可以回到「Protected branches」,用wildcard分别设置bug/*、release/*、feature/*,此时如果仓库里已有这类分支,就会显示匹配数量了。
内容的提问来源于stack exchange,提问作者edjm
相关产品推荐
相关产品推荐

