Как отказаться от принудительного обновления GIT на стороне клиента при выполнении git fetch или git pull? - PullRequest
0 голосов
/ 04 марта 2019

Можно запретить принудительные нажатия на стороне сервера, установив receive.denyNonFastForwards или добавив Git-хук (или другим способом для специальных серверов GIT, таких как Gerrit илиGithub).Я хотел бы отказаться от принудительного обновления на стороне клиента (см. Также здесь ) при выполнении git fetch или git pull или git pull --rebase.Если у меня нет доступа к серверу GIT для отклонения принудительных нажатий (или если я не доверяю серверу, потому что у других тоже есть доступ), я мог бы захотеть, чтобы GIT остановился с ошибкой, прежде чем изменять какие-либо ссылки, когда принудительный толчок былсделанный.Это может помочь заметить, что злоумышленники меняют пульт, или если я просто хочу узнать, изменяет ли кто-нибудь мои коммиты (да, если я действительно хочу, чтобы кто-то еще не делал коммиты, используя мое имя, мне нужно подписать мои коммиты, используя мой ключ).

Мне кажется, что невозможно выполнить код после команды fetch или pull с использованием перехватчиков.Я анализирую вывод git fetch и выдаю ошибку, если было напечатано «принудительное обновление».Но на самом деле было бы лучше обнаружить это до изменения ссылок.

Есть ли лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

решение max630 хорошо, но давайте просто заметим, что когда вы хотите проверить то, что было бы извлечено / извлечено, вы можете, без всякого хака конфигурации, пойти на сухойзапустите:

git fetch --dry-run

и вы увидите, что было бы , без каких-либо изменений в ваших ветвях удаленного слежения.

Нет аналогичного трюка для pull, нопоскольку извлечение - это выборка + слияние, заранее выполните выборку пробного запуска, и вы узнаете, что было бы извлечено.


Предел этой техники, как кан справедливо отмечен в комментариях ниже, это не атомарность: удаленное состояние может измениться между вашим fetch --dry-run и реальным моментом спустя секунды.Во всяком случае, не вредно знать, что оно существует.

0 голосов
/ 05 марта 2019

Отредактируйте строку remote.fetch gfrom git config, чтобы удалить из нее знак "+", тогда выборка без ускоренной перемотки завершится неудачно.Не защищает хоть от удаления ветки

...