修复 GitLab 错误:"you are not allowed to push code to protected branches on this project"?

592

我在项目中拥有开发者权限时,推送代码到Git时遇到了问题,但当我拥有主管理员权限时一切正常。问题出在哪里?如何解决?

错误信息:

错误:您不被允许向此项目的受保护分支推送代码。
...
错误:无法将某些引用推送到 ...


Hcorg的答案是一个很好的解决方案。但它还存在另一个问题,如果项目刚创建并且还没有分支,点击“受保护的分支”将会重定向到项目主页。创建一个分支就可以解决这个问题。 - pdwjun
请参见 https://stackoverflow.com/a/61964599/6309,使用 GitLab 13.0(2020年5月),您可以启用组级别的默认分支保护。 - VonC
19个回答

902

没有问题 - 一切都按预期工作。

在GitLab中,有些分支可以受到保护。默认情况下,只有维护者/所有者用户才能提交到受保护的分支(参见权限文档)。master分支是默认受保护的 - 它会强制开发人员发起合并请求,由项目维护者验证后再将其集成到主代码中。

您可以在项目设置中打开和关闭选定分支的保护(具体位置取决于GitLab版本 - 请参见下面的说明)。

在同一设置页面上,您还可以允许开发人员向受保护的分支推送。打开此设置后,保护将仅限于拒绝需要 git push --force(rebase等)的操作。

自GitLab 9.3以来

进入项目:"设置"→"存储库"→"展开" "受保护的分支"

enter image description here

我不确定这个更改是何时引入的,截图来自10.3版本。
现在,您可以选择允许谁合并或推送到选定的分支(例如:您可以完全关闭对master的推送,强制所有更改通过合并请求进行)。或者,您可以点击“取消保护”以完全删除分支的保护。
自GitLab 9.0以来
与GitLab 9.3类似,但无需单击“展开”-一切都已经展开:
进入项目:“设置”→“存储库”→向下滚动到“受保护的分支”。

enter image description here

GitLab 9.0之前

项目:"设置" → "受保护的分支"(如果您是给定项目的至少 'Master')。

Settings → Protected branches

然后点击“取消保护”或“开发人员可推送”:

enter image description here


2
由于某些原因,我突然不得不将自己添加为我的项目的主用户。 - jgillich
5
因为我不是自己项目的成员,但已经在这个项目上推送了代码,所以出现了这个问题...要更改这个问题,在你的项目中,点击齿轮图标,选择"成员”,搜索你的用户名,赋予其角色,然后点击"添加用户到项目"即可。 - Loenix
在GitLab 9.0中,受保护的分支设置现已移至项目设置=>存储库=>受保护的分支。 - Bancarel Valentin
@BancarelValentin 谢谢您的评论 - 回答已更新 :) - Hcorg
1
如果你是唯一的维护者或开发者,那么更改设置并进行测试是很好的。但是,如果有一个团队在处理代码库,那么更改代码库保护设置就不是一个好的做法。 - Mnemo
显示剩余12条评论

60

针对GitLab企业版9.3.0版本

默认情况下,主分支是受保护的,可以取消保护 :)

1-选择您的“项目”

2-选择“存储库”

3-选择“分支”

4-选择“项目设置”

5-在“受保护的分支”中点击“展开”

6-然后点击“取消保护”按钮


我没有“分支”,因为我还没有在这个存储库中创建任何文件。 我已经创建了Readme.md,分支出现了。 - Ikrom
1
路过的人请注意,不要这样做。即使你在一个小型组织/公司工作,这也会引发严重的安全问题。 - djthoms

20

备选方案,使用 GitLab 13.11(2021年4月)

保护分支的强制推送选项

在 Git 仓库中,防止进行 force push 是最佳实践,但特殊情况偶尔可能需要。

为了进行 force push,暂时移除分支保护可能并不总是理想的选择,因为这需要维护者权限,并且会导致分支保护设置丢失

GitLab 13.11 引入了新的允许强制推送设置,用于保护分支,该设置允许Allowed to push列表中的用户进行强制推送。

https://about.gitlab.com/images/13_11/code_owners_approval_new_protected_branch_v13_10.png -- Force push option for protected branches

请参阅文档问题


此外,GitLab 16.2(2023年7月)还新增了以下内容:

允许对受保护的分支进行初始推送

在之前的GitLab版本中,当默认分支被完全保护时,只有项目维护人员和所有者才能向默认分支推送初始提交。

这给开发者们带来了麻烦,因为他们创建了一个新项目,但无法将初始提交推送到其中,因为只有默认分支存在。

通过初始推送后完全保护设置,开发者可以将初始提交推送到存储库的默认分支,但之后不能再推送任何提交到默认分支。类似于分支完全保护时的情况,项目维护人员始终可以向默认分支推送,但没有人可以强制推送。

https://about.gitlab.com/images/16_2/govern-initial-push-protected-branch.png -- 允许对受保护的分支进行初始推送

参见文档问题


7
打开git中的分支设置后,允许强制推送。

Allow to force push option


5
当你收到以下错误信息时:remote: You are not allowed to push code to this project.The requested URL returned error: 403

请尝试设置Git用户,在推送代码之前提示用户名,您可以使用以下命令:
$ git config --local credential.helper "" 

输入用户名和密码并成功登录后

$ git push

4
我遇到这个问题时正在使用Windows。这个错误非常奇怪,因为它在我输入用户名和密码之前就发生了。如果有缓存或类似的东西怎么办?我在网上搜索并找到了gitlab支持论坛上的 答案

我打开“控制面板 => 用户帐户 => 管理您的凭据 => Windows 凭据”,我发现有两个关于https://@github.com的 GitLab 条目,其中一个是错误的用户。我删除了它,在下一次“git push”时我被提示提供正确的凭据,然后它就可以工作了!还有一些注意事项-这可能发生在任何git远程上。

在Windows凭据中,我找到了两个旧账户的GitLab条目。我将它们都删除后,现在它可以工作了!
面板如下:

enter image description here


@YanickSenn 没关系。我在这个问题上浪费了很多时间。很高兴能帮到你。 - aloisdg

3

这被视为Gitlab的特性。

维护者/所有者访问权限无法对默认和受保护的分支进行强制推送,如文档中所述enter image description here


1
实际上这一点都不不幸。这绝对是一件好事。它提供了额外的保护层。 - Chiramisu

2

2

我在本地的GitLab服务器上遇到了这个"空分支"错误。一些人提到"你不能在一个空分支上第一次推送"。我试图通过浏览器在GitLab上创建一个简单的README文件,然后一切都神奇地解决了!我提到,我是主分支且该分支没有受到保护。


1
这对我来说很奇怪,我认为这是一个GitLab的bug。我不能没有权限将内容推送到空仓库中,这是不可接受的。我希望Git团队能够给出答案。 - Vahid F

2

对我来说,创建个人访问令牌时,选择 开发人员 而不是 维护者 职位是一个问题。

选择 维护者 解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接