gitee支持按用户名精确限制合并权限:进入“保护分支设置”,将“可合并pull request成员”设为“指定成员”并勾选user_a和user_b,其他用户即使为开发者角色也无法看到合并按钮。

Git 本身不提供“按用户名限制合并”的原生能力。所谓“指定分支仅允许特定用户合并”,实际依赖的是 Git 托管平台(如 GitLab、Gitee、GitHub、Azure DevOps)的分支保护机制,而非 Git 命令或本地配置。
GitLab 中设置指定用户可合并 protected 分支
GitLab 的 Protected Branches 规则支持按角色(Maintainer、Developer)控制合并权限,但不支持直接按用户名白名单。要实现“仅 user_a 和 user_b 能合并”,必须满足以下条件:
- 将 user_a 和 user_b 单独提升为
Maintainer角色(其他成员保持Developer或更低) - 在
Protected Branches设置中,将Allowed to merge设为Maintainers - 确保该分支同时启用
Require approval from code owners或Require at least X approvals可进一步收紧,但不会绕过角色限制 - 注意:
Developer用户仍可创建 MR,只是无法点击「Merge」按钮;若误设为Developers,则所有 Developer 都能合并,失去控制力
Gitee 上如何让只有 A/B 两人能点「合并」按钮
Gitee 的保护分支设置更直观,支持角色级 + 成员级双重控制:
- 进入仓库 → 「管理」→「保护分支设置」→ 编辑目标分支(如
master) - 关键配置项必须设为:
可合并 Pull Request 成员→ 选择「指定成员」→ 勾选 user_a 和 user_b - 此时即使 user_c 是「开发者」角色,也无法看到「合并」按钮,MR 页面会提示「您没有合并权限」
- 注意:该设置只影响 Web 界面合并操作;若用户通过 SSH 直连 Git 服务器并绕过 Gitee(如自建 bare repo),此限制无效
GitHub 不支持按用户名限制合并,只能靠 CODEOWNERS + required reviewers
GitHub 原生不提供「仅某几个用户可合并」的开关。可行路径是组合策略:
- 启用 branch protection rule,勾选
Require pull request reviews before merging - 在仓库根目录添加
CODEOWNERS文件,例如:* @user_a @user_b
或更精确地:src/** @user_a
- 设置 PR review rule:要求至少 1 名 code owner 批准才允许合并
- 效果:user_a/user_b 成为 mandatory reviewer,其他人即使有写权限也无法绕过他们的审批
- 缺陷:user_a/user_b 仍需主动点击 approve;若他们不响应,PR 会被卡住 —— 这是设计使然,不是漏洞
自建 Git 服务(如 Gitea / bare repo)用 pre-receive hook 拦截非授权合并
如果托管在自建服务上,且你有服务器 SSH 权限,可用 pre-receive hook 实现精确用户名控制:
- hook 脚本需读取
$USER(SSH 登录名)或解析 Git push 的 ref update 数据 - 对目标分支(如
refs/heads/master)检查推送者是否在白名单数组中 - 示例片段(bash):
#!/bin/bash<br>ALLOWED=("alice" "bob")<br>while read oldrev newrev refname; do<br> if [[ "$refname" == "refs/heads/master" ]]; then<br> if [[ ! " ${ALLOWED[@]} " =~ " ${USER} " ]]; then<br> echo "ERROR: Only alice/bob may push to master"<br> exit 1<br> fi<br> fi<br>done - 注意:
$USER在 Git over HTTPS 场景下不可靠(常为 git 或 www-data),仅适用于 SSH 推送;HTTP 推送需结合 Git 多路复用或反向代理传入真实用户名
真正容易被忽略的点是:所有平台级限制都只作用于「合并动作发生时」,而不是「提交内容本身」。只要用户能往非保护分支推代码,再发起合法 PR,就可能间接影响保护分支 —— 所以必须同步限制源分支的推送权限,或配合 CODEOWNERS/CI 检查做二次过滤。











