GitLab同权限下ProjectB可拉取但无法推送问题求助
已知信息
- 两个GitLab项目:
<url>/groupA/projectA和<url>/groupB/projectB,均使用默认权限组 - 账号在两个项目中均为Developer权限,采用SSH认证
- 本地
git remote -v仅仓库地址不同,ProjectA操作完全正常 - ProjectB可正常克隆、拉取,浏览器端可创建分支、提交及合并请求,但本地创建分支推送时报错:
remote:
remote: ========================================================================
remote:
remote: ERROR: You are not allowed to push code to this project.remote:
remote: ========================================================================
remote:
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists. - 已尝试:重新生成SSH密钥、ProjectB所有者核查权限、
ssh git@<url>连接正常
排查建议
检查ProjectB的分支保护规则
这是最常见的触发原因:即使是Developer权限,若目标分支(含你新建的分支)设置了推送限制,也会被拦截。进入ProjectB的Settings > Repository > Branch protection,查看对应分支的规则:- 确认
Allowed to push选项是否包含Developer角色 - 检查是否有额外的用户/组限制,排除你的账号被排除在外的情况
- 注意:部分企业GitLab会默认对所有新建分支启用保护,需确认规则范围
- 确认
验证本地SSH密钥的实际使用情况
虽然ssh git@<url>连接正常,但可能本地对ProjectB使用了错误的SSH密钥。执行以下命令查看推送时的SSH详细日志:GIT_SSH_COMMAND="ssh -v" git push重点查看日志中
Offering public key部分,确认使用的密钥与GitLab账号绑定的一致;同时检查~/.ssh/config是否有针对ProjectB域名的特殊配置,导致密钥不匹配。检查ProjectB所在群组的权限继承
若ProjectB继承了GroupB的权限设置,可能群组层面限制了Developer的推送权限。进入GroupB的Settings > Permissions,查看Developer角色的权限配置,确认Push to repository权限是否被禁用。核查GitLab推送规则(Push Rules)
进入ProjectB的Settings > Repository > Push Rules,检查是否有特殊规则拦截推送:- 虽然报错提示权限问题,但部分规则(如强制提交格式、禁止特定分支名)可能触发类似报错
- 暂时禁用所有推送规则后重试,排查是否为规则导致的拦截
核对本地Git提交身份
部分企业GitLab会要求提交者邮箱与账号绑定邮箱一致,执行以下命令查看本地配置:git config --list | grep user确认
user.name和user.email与GitLab账号信息匹配,若不匹配,执行git config --global user.email "你的GitLab邮箱"修改。请求管理员查看审计日志
若以上排查均无效,联系GitLab管理员进入Admin Area > Audits,搜索ProjectB和你的账号,查看推送操作的详细审计记录。日志会明确显示拒绝推送的具体原因(如分支保护限制、系统权限策略、账号异常等)。
内容的提问来源于stack exchange,提问作者A. Graham

