在 GitLab 中防止主分支误删的最直接方法是启用“受保护分支”(Protected Branches)功能,将推送和删除权限限制为仅维护者或无人允许。该功能适用于所有正式投产的项目仓库,能有效阻断本地误操作或脚本错误导致的生产代码丢失。
核心结论:通过项目设置中的仓库保护规则,锁定主分支的推送与删除权限,从服务端阻断误操作。
- 适用场景:生产环境代码库、多人协作的主干分支(如 main/master)。
- 前置准备:确认当前分支状态,备份重要代码,通知团队成员变更规则。
- 验收标准:尝试直接推送代码到受保护分支,确认被服务端拒绝。
版本与权限说明
GitLab 界面随版本迭代会有调整,以下基于 GitLab 15.x 及以上版本描述。免费版(Free)支持基础的分支保护,部分高级规则(如基于代码所有权的保护)可能需要 Premium 版本。若找不到对应菜单,请检查当前用户是否具有“维护者”(Maintainer)或“所有者”(Owner)权限。
具体配置步骤
1. 进入项目设置:登录 GitLab,打开目标项目,点击左侧导航栏的“设置”(Settings),选择“仓库”(Repository)。
2. 定位保护选项:向下滚动页面,找到“受保护的分支”(Protected branches)区域,点击展开。
3. 配置分支规则:在“分支”下拉框中选择要保护的分支(如 main 或 master)。
4. 设置权限:
- 允许合并(Allowed to merge):建议设为“维护者”(Maintainers),确保只有资深成员可合并代码。
- 允许推送(Allowed to push):建议设为“无人”(No one),强制所有变更必须通过合并请求(Merge Request)。
- 允许删除(Allowed to delete):务必设为“无人”(No one),防止分支被意外移除。
5. 保存生效:点击“保护”(Protect)按钮,列表中出现该分支即表示配置成功。
本地验证方法
配置完成后,不要立刻依赖直觉,要用实际操作验证。切换到本地开发分支,尝试直接向受保护分支推送提交。如果配置正确,Git 命令行会返回错误信息。
# 本地验证命令(配置后执行)
git checkout main
git commit `--allow-empty` -m "test protect"
git push origin main
# 预期结果:remote: Rejected due to protected branch hook此外,可以在 GitLab 网页端尝试删除该分支,删除按钮应变灰或点击后提示权限不足。
紧急解除保护指南
若因配置错误导致无法正常开发,需紧急解除保护:
1. 拥有“维护者”及以上权限的用户进入“设置” > “仓库” > “受保护的分支”。
2. 在列表中找到目标分支,点击右侧的“取消保护”(Unprotect)图标(通常为垃圾桶或解锁图标)。
3. 若默认分支被锁定无法删除,需先在“设置” > “常规”(General)中更换默认分支,再解除保护。
常见坑与排查
- CI/CD 权限问题:如果开启了流水线自动合并,确保 CI/CD 令牌拥有相应权限,否则流水线可能会因无法推送而失败。
- 管理员特权:在某些 GitLab 版本中,管理员可能拥有绕过保护的权限,需检查是否勾选了“包括管理员”(Include administrators)选项以增强约束。
- 界面差异:旧版本 GitLab 界面可能略有不同,若找不到“仓库”设置,可尝试在“分支”页面直接查找保护选项。