Чому моє git завжди змушує натискати?


5

Здається, що моя локальна установка 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' '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'

Нерозумне запитання: Чи намагалися ви git pullдо того, git pushчи, можливо, також вам було незахищено masterбачити, що відбувається? Я погоджуюся, що повідомлення про помилку є дивним, якщо ви явно не використовуєте git push -f?
JakeGould

@JakeGould: для незахищених masterвін працює як зазначено; тож проблема справді полягає у захисті філії. git pullговорить мені, що це вже актуально.
Віллі Вонг

Більш докладний вихід може виявити, що git робить під кришкою. У будь-якому випадку, git-scm.com/docs/git-config повідомляє, де знаходяться файли конфігурації Git. and stackoverflow.com/questions/12254076/show-git-config розповідає, як скинути всі ефективні варіанти.
ivan_pozdeev

Силові натискання руйнівні, і їх слід використовувати лише обережно, тому я думаю, що це малоймовірно, що не було б жодного варіанту, який би регулярно передбачав силовий натиск. Ви зв’язалися зі своїми адміністраторами GitLab? Я б здогадався, проблема, швидше за все, на їхньому боці.
jjlin

Я включу інформацію git config у запитання; Я не бачу нічого одразу очевидного. Якщо ви можете сказати мені, як зробити Git більш багатослівним, я також вдячний. (Встановлення GIT_TRACE = 1 не дає корисної інформації.)
Віллі Вонг

Відповіді:


2

Я зв’язався з нашим доброзичливим місцевим адміністратором 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, я не знайшов жодного.


Помилка все ще присутня в GitLab 8.14.4.
Михай
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.