Есть ли способ настроить хранилище git для отклонения 'git push -force'?
Мне было интересно, есть ли способ предотвратить "git push --force
" в репозитории (только на главной ветке)?
Предположим, у меня есть удаленный репозиторий git и выполните:
- '
git push
' в 'master'. Он работает.
- '
git push --force
' в 'branch-1'. Он работает.
- '
git push --force
' в 'master'. Он отклоняется.
Возможно ли это?
Спасибо за любые ответы и предложения.
BR,
Dawid.
Ответы
Ответ 1
Настройка переменных конфигурации:
receive.denyNonFastForwards
receive.denyDeletes
предотвратит работу любых "принудительных" нажатий на всех ветвях.
Если вы хотите более тонкое управление ветвями, то вам придется использовать "крючок" в удаленном репозитории, возможно, "крюк обновления".
Существует примерный крюк обновления, называемый "update-paranoid", который, вероятно, делает то, что вам нужно (и больше) в дистрибутиве git в папке "contrib".
ссылка gitweb
Ответ 2
Я написал этот быстрый крюк обновления, чтобы предотвратить непереходные обновления (push) в ветке "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