有没有一种方法可以配置git仓库拒绝'git push --force'?

我想知道是否有办法防止存储库中的“ git push --force”(仅在主分支上)?

假设我有远程git存储库并执行以下操作:

  • 'git push --force'更改为'master'。 有用。
  • 'git push --force'到'branch-1'。 有用。
  • 'git push --force'更改为'master'。 它被拒绝了。

可能吗

感谢您的任何答案和建议。

BR大卫。

Czlowiekwidmo asked 2020-06-27T02:47:34Z
3个解决方案
46 votes

设置配置变量:

receive.denyNonFastForwards
receive.denyDeletes

将阻止所有分支机构进行任何“强制”推送。

如果想要更好的分支前控制,则必须在远程存储库上使用“钩子”,可能是“更新”钩子。

有一个名为“ update-paranoid”的示例更新挂钩,它可能会在“ contrib”文件夹中的git发行版中满足您的需要(以及更多)。

gitweb链接

CB Bailey answered 2020-06-27T02:48:06Z
4 votes

Github已经引入了受保护分支的概念!

可以在Settings -> Branches -> Protected Branches下找到它。该功能现已供所有用户使用-不仅限于企业用户!

可以为任何分支机构和任何用户(包括管理员)启用此“保护”。

此处有更多详细信息-[https://help.github.com/articles/defining-the-mergeability-of-pull-requests/]

因此,不再需要任何钩子和任意代码。

hakeris1010 answered 2020-06-27T02:48:44Z
3 votes

我写了这个快速更新钩子,以防止在存储库中的“ 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
Thomas Koch answered 2020-06-27T02:49:19Z
translate from https://stackoverflow.com:/questions/1754491/is-there-a-way-to-configure-git-repository-to-reject-git-push-force