Почему мой мерзавец всегда толкает?

Кажется, что моя локальная установка git (версия 2.10.2) такова, что всякий раз, когда я выпускал git push, это интерпретируется как git push -f, Есть ли переменная конфигурации, которую я мог бы установить неправильно, чтобы вызвать такое поведение?

Больше фона

Недавно сервер, которым я пользуюсь, обновил свою установку GitLab (под управлением Community Edition 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' 'git@gitlab.REDACTED' '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 Мастер или Разработчик не могут перейти в защищенные ветви, даже если у них есть правильные разрешения.

Читая комментарии, кажется, что причина уже найдена (хотя я сам не могу в этом разобраться) и, вероятно, будет решена в следующем выпуске.

Одна из вещей, на которую мне указал администратор (которая также объясняет, почему я сам не нашел эту ошибку, когда выполнял поиск), заключается в том, что важна именно версия git на сервере. Хотя я запускаю 2.10.2 локально, именно обновление до 2.11.0 на их сервере вызвало проблему. Поэтому, когда я искал конкретные конфликты между 2.10.2 и GitLab, я не обнаруживал их.

Другие вопросы по тегам