当我在项目中有开发人员访问权限时将代码推送到 git 时遇到问题,但是当我拥有主访问权限时一切正常。问题出在哪里?以及如何解决?
错误信息:
错误:您不允许将代码推送到此项目的受保护分支。 ...错误:未能将一些参考资料推送到...
没有问题 - 一切都按预期工作。
在 GitLab 中,一些分支可以受到保护。默认情况下,只有维护者/所有者用户可以提交到受保护的分支(请参阅 permissions docs)。 master
分支默认受保护 - 它强制开发人员发出合并请求以由项目维护人员验证,然后再将它们集成到主代码中。
您可以在项目设置中打开和关闭选定分支的保护(具体取决于 GitLab 版本 - 请参阅下面的说明)。
在同一设置页面上,您还可以允许开发人员推送到受保护的分支。启用此设置后,保护将仅限于拒绝需要 git push --force
的操作(变基等)
从 GitLab 9.3 开始
转到项目:“设置”→“存储库”→“受保护分支”上的“扩展”
https://i.stack.imgur.com/e82Pn.png
我不确定何时引入此更改,屏幕截图来自 10.3 版本。
现在您可以选择允许谁合并或推送到选定的分支(例如:您可以完全关闭对 master
的推送,强制通过合并请求对分支进行所有更改)。或者您可以单击“取消保护”以完全删除分支的保护。
从 GitLab 9.0 开始
与 GitLab 9.3 类似,但无需单击“展开”——所有内容都已展开:
转到项目:“设置”→“存储库”→向下滚动到“受保护的分支”。
https://i.stack.imgur.com/rr8N2.png
前 GitLab 9.0
项目:“设置”→“受保护的分支”(如果您至少是给定项目的“大师”)。
https://i.stack.imgur.com/Whjbb.jpg
然后点击“取消保护”或“开发者可以推送”:
https://i.stack.imgur.com/R5sIt.jpg
GitLab 企业版 9.3.0
默认情况下,master 分支是受保护的,所以取消保护 :)
1-选择你的“项目”
2-选择“存储库”
3-选择“分支”
4-选择“项目设置”
5-在“受保护的分支”中单击“展开”
6-点击“取消保护”按钮后
使用 GitLab 13.11 的替代解决方案(2021 年 4 月)
受保护分支的强制推送选项 防止在 Git 存储库上强制推送是最佳实践,但在特殊情况下可能偶尔需要它。临时移除分支保护以执行强制推送可能并不总是理想的,因为它需要维护者访问权限,并导致分支保护设置丢失。 GitLab 13.11 为受保护的分支引入了新的允许强制推送设置,该设置允许允许推送列表中的用户强制推送。请参阅文档和问题。
出现此问题时,我在 Windows 上。
这个错误很奇怪,因为它发生在我输入用户名和密码之前。如果有缓存或类似的东西怎么办?我在网上搜索并找到了这个answer on gitlab's support forum:
我打开“控制面板 => 用户帐户 => 管理您的凭据 => Windows 凭据”,我为 https://@github.com 找到了两个,一个是错误的用户。我删除了它,并在下一次“git push”中再次提示我并提供了正确的凭据,并且它起作用了!其他一些注意事项 - 这可能发生在任何 git 遥控器上。
在 Windows 凭据中,我发现两个 GitLab 条目用于一个旧帐户。我删除了两者,现在它可以工作了!
面板:
https://i.stack.imgur.com/DtqSt.png
我在本地 gitlab 服务器上的“空分支”上遇到了这个错误。有人提到“你不能在空的分支上第一次推送”。我试图通过浏览器在 gitlab 上创建一个简单的 README 文件。然后一切都神奇地解决了,问题也解决了!!我提到我是主人,分支没有受到保护。
这被认为是 Gitlab 中的特性。
https://i.stack.imgur.com/iY3XZ.png
当您错误消息 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
我在我的存储库中遇到了同样的问题。我是存储库的主人,但我遇到了这样的错误。
我已取消保护我的项目,然后再次重新保护,错误消失了。
在我之前的推送和有问题的推送之间,我们已经升级了 gitlab 版本。我想这次升级造成了这个错误。
这个问题的简单解决方案是与在 gitlab 中具有所有者角色的人快速聊天。他可以推送一个文件 READ.md 或类似文件以开始。稍后,一切都会像以前一样工作。
对我来说,在创建个人访问令牌时选择 Developer
而不是 Maintainer
位置是一个问题。
选择 Maintainer
解决了这种情况。
上述解决方案清楚地说明了问题所在;当您无法控制 repo 时,提交代码的最佳方式是创建原始 repo 的 Fork 并将您的代码提交到这个新 repo,以便稍后您可以将其推送到原始 repo。