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
は(私の名前、電子メール、およびリポジトリの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'
フレンドリーなローカルGitLab管理者に連絡したところ、 既知のバグ であることが判明しました。
GITバージョン2.11.0をGitlabv。8.11.xと組み合わせてインストールすると、8.14.2マスターまたは開発者は、適切な権限を持っていても、保護されたブランチにプッシュできません。
コメントを読んでみると、原因はすでにわかっているようで(私自身はあまり理解できませんが)、おそらく将来のリリースで解決されるでしょう。
管理者が私に指摘したことの1つ(これは、検索を行ったときにこのバグを自分で見つけられなかった理由も説明しています)は、サーバー上のgitバージョンであるということです。 重要です。 2.10.2をローカルで実行しているときに、問題の原因となったのはサーバーでの2.11.0への更新です。そのため、2.10.2とGitLabの間の特定の競合を探したところ、何も見つかりませんでした。