尽管我是项目的所有者,但GitLab拒绝推动掌握

尽管我是项目的所有者,但GitLab拒绝推动掌握,git,gitlab,Git,Gitlab,运行以下命令: GitLab 8.15.0-rc1 GitLab Shell 4.0.3 GitLab Workhorse v1.1.1 GitLab API v3 Git 2.11.0 Ruby 2.3.3p222 轨道4.2.7.1 PostgreSQL 9.2.18 我已经在GitLab中创建了一个项目,并将代码毫无问题地推送到那里。我是项目所有者,在项目中担任“主管”角色 默认情况下,分支“master”设置为“受保护的分支”,仅允许角色为“master”的组成员合并并推送到该分支

运行以下命令:

  • GitLab 8.15.0-rc1
  • GitLab Shell 4.0.3
  • GitLab Workhorse v1.1.1
  • GitLab API v3
  • Git 2.11.0
  • Ruby 2.3.3p222
  • 轨道4.2.7.1
  • PostgreSQL 9.2.18
我已经在GitLab中创建了一个项目,并将代码毫无问题地推送到那里。我是项目所有者,在项目中担任“主管”角色

默认情况下,分支“master”设置为“受保护的分支”,仅允许角色为“master”的组成员合并并推送到该分支

现在我直接在master中做了一些小的更改,这些更改不需要单独的分支

但是,当我提交并推送这些更改时,会出现以下错误:

D:\Projects\MyProject>git push
Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (8/8), 731 bytes | 0 bytes/s, done.
Total 8 (delta 7), reused 0 (delta 0)
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
To https://git.****.**/*****/****.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.****.**/*****/****.git'
不知道我做错了什么。我不是Git方面的专家,但这被认为是一种“强制推动”吗?因为它被所有用户阻止,包括角色为“master”的用户。如果是这样,我应该如何更改主分支


它一定与“受保护的分支”有关。如果我把它取下来,我就能推得很好。但是,由于“受保护的分支”还阻止删除分支及其历史记录,因此我想保留它。

根据GitLab问题跟踪程序,这是已知的与Git 2.11和最新GitLab版本的不兼容


暂时从源代码降级到Git 2.10应该可以解决这个问题,直到GitLab的未来版本中构建了对Git 2.11+的适当支持。

这应该可以更好地与

启用组级默认分支保护 以前,将实例级别的默认分支保护设置向下转换到项目中是令人困惑的,因为在某些场景中,它创建了一种不直观的体验:开发人员无法将新提交推送到他们可以创建的项目

这使得组织很难在降低风险和允许所有开发人员全权访问项目之间取得平衡,因为工作环境要求将项目升级为维护人员

现在,可以在组级别设置默认分支保护,为管理员和组所有者提供更好的灵活性。

通过结合使用默认分支保护和默认项目创建设置,组织可以找到自治和控制的正确组合,例如使用自定义默认分支保护,只允许维护人员创建新项目。
这将允许开发人员向新项目推送新提交(而不是强制推送或删除分支),但允许维护人员控制项目创建

对于需要更严格控制的组织,可以禁用默认分支保护的组级配置。
通过禁用默认分支保护的组级设置,维护人员可以对开发人员的访问和权限应用更严格的控制


请参阅和。

我认为主分支在GitLab中设置为受保护。请禁用保护。如果你不知道怎么做。请仔细阅读整篇文章。在GitLab中将分支设置为保护分支应该可以防止任何人进行“强制推送”,但仍然应该允许角色为“master”的人进行定期推送。这甚至存在于你链接的文档中……请注意,这不是Git中的bug!这是GitLab中的一个bug,它试图以特定的方式控制(从而限制)Git。Git的内部机制在Git2.11中发生了变化,在Git背后控制(从而限制)Git最终破坏了GitLab对Git的使用。因此,这是GitLab中的一个bug,但不是Git中的bug。请注意,该bug表明服务器上的Git 2.11存在问题。@JonathonReinhart:GitLab是在运行自己Git的服务器上运行的,在本例中,@torek作为四台GitLab服务器的管理员,我非常了解GitLab是什么以及它是如何工作的。在
git-push
操作期间,有两个
git
二进制文件在起作用:客户端系统上的
git
进行推送,而服务器上的
git
由Rails
Popen
-ed。问题或答案中没有任何内容表明哪个git版本有问题,我指出的是服务器上的问题。许多用户将通过其omnibus软件包安装GitLab,在这种情况下,omnibus自带了自己的
git
,完全避免了这个问题。因此,这只是源安装的问题。