为什么我的 git 总是强制推送?

为什么我的 git 总是强制推送?

看来我本地安装的git(版本 2.10.2) 是这样的,每当我发出 时git push,它都会被解释为git push -f。是否有我可能错误设置了配置变量导致此行为?

更多背景信息

最近,我使用的服务器升级了 GitLab 安装(运行社区版 8.14.2 b9442a5eb0,不幸的是,我没有简单的方法可以找到以前的版本)。对于我拥有(并拥有主权限)的每个项目,我都会获得

[Tue Dec 06 02:21 PM] ArchDesktop $ git push 
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 765 bytes | 0 bytes/s, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
To REDACTED
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'REDACTED'

我认为这是由于 GitLab 较新版本中实施了“受保护的分支”。现在,我应该能够推送内容,因为我对自己的项目拥有主访问权限。此外,如果只是权限问题,我理解的错误消息应该是

remote: GitLab: You are not allowed to force push code to a protected branch

没有提到力量推送。所以真正的问题是:当我没有告诉 Git 时,为什么它要强制推送我的提交?

更多背景

曾经,我读过 Git 的工作原理,并且真正理解了它。然后我开始使用它,但基本上已经忘记了。因此,我完全有可能做错了什么,而且不理解它。我甚至不确定如何诊断这个问题。所以,欢迎大家对我需要在这个问题中包括什么或我应该检查哪些显而易见的东西发表意见!


附加信息

根据要求:git config --list仅提供(除了我的名字,电子邮件和 repo 的 URL)

user.name=*******
user.email=******
push.default=simple
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=**************
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

稍微删减的输出GIT_TRACE=1 git push

09:13:50.859273 git.c:349               trace: built-in: git 'push'
09:13:50.859524 run-command.c:336       trace: run_command: 'ssh' '[email protected]' 'git-receive-pack '\''REDACTED.git'\'''
09:13:54.097551 run-command.c:336       trace: run_command: 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
09:13:54.098218 exec_cmd.c:120          trace: exec: 'git' 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
09:13:54.100884 git.c:349               trace: built-in: git 'pack-objects' '--all-progress-implied' '--revs' '--stdout' '--thin' '--delta-base-offset' '--progress'
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 389 bytes | 0 bytes/s, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
To REDACTED
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'REDACTED'

答案1

我联系了我们友好的当地 GitLab 管理员,结果发现是已知错误

当 GIT 版本 2.11.0 与 Gitlab v. 8.11.x - 8.14.2 结合安装时,Master 或 Developer 即使具有正确的权限也无法推送到受保护的分支。

通过阅读评论,似乎原因已经找到(虽然我自己无法理解太多),并且可能会在将来的版本中得到解决。

管理员向我指出的一件事(这也解释了为什么我自己在搜索时没有发现这个错误),是 git 版本在服务器上这很重要。虽然我在本地运行 2.10.2,但问题是他们服务器上的 2.11.0 更新导致的。因此,当我查找 2.10.2 和 GitLab 之间的具体冲突时,我没有发现任何冲突。

相关内容