Есть ли способ настроить репозиторий git, чтобы отклонить 'git push --force'? - PullRequest
45 голосов
/ 18 ноября 2009

Мне было интересно, есть ли способ предотвратить 'git push --force' в репозитории (только в основной ветке)?

Предположим, у меня есть удаленный репозиторий git и я делаю:

  • 'git push' до 'мастер'. Это работает.
  • 'git push --force' to 'branch-1'. Это работает.
  • 'git push --force' до 'мастер'. Отклонено.

Это вообще возможно?

Спасибо за любые ответы и предложения.

BR, Dawid.

Ответы [ 3 ]

46 голосов
/ 18 ноября 2009

Настройка переменных конфигурации:

receive.denyNonFastForwards
receive.denyDeletes

предотвратит любые «принудительные» толчки во всех ветвях.

Если вы хотите более точный контроль перед ветвлением, вам придется использовать «ловушку» в удаленном хранилище, возможно, «ловушку» обновления.

Существует примерный хук обновления, называемый update-paranoid, который, вероятно, делает то, что вам нужно (и даже больше) в дистрибутиве git в папке contrib.

gitweb link

3 голосов
/ 05 марта 2018

Github уже представил концепцию защищенных веток!

Его можно найти под Settings -> Branches -> Protected Branches. Функция теперь доступна для всех пользователей - не только для предприятий!

Эта «защита» может быть включена для любого филиала и для любого пользователя, включая администраторов.

Подробнее здесь - https://help.github.com/articles/defining-the-mergeability-of-pull-requests/

Так что больше никаких хуков и произвольного кода не требуется.

3 голосов
/ 01 октября 2013

Я написал эту ловушку быстрого обновления для предотвращения обновлений без ускоренной пересылки (толчков) в ветке "dev" в хранилище:

#!/bin/sh

REFNAME=$1
OLDSHA=$2
NEWSHA=$3

if [ "refs/heads/dev" != $REFNAME ]; then
  exit 0
fi

MERGEBASE=$(git merge-base $OLDSHA $NEWSHA)
if [ $OLDSHA = $MERGEBASE ]; then
  exit 0
fi

echo "Not a fast-forward on branch dev"
exit 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...