有没有办法配置git存储库拒绝'git push -force'?

问题描述 投票:44回答:3

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

假设我有远程git存储库并执行:

  • 'git push'到'掌握'。有用。
  • 'git push --force'到'branch-1'。有用。
  • 'git push --force'到'掌握'。它被拒绝了。

它甚至可能吗?

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

BR,Dawid。

git
3个回答
46
投票

设置配置变量:

receive.denyNonFastForwards
receive.denyDeletes

将阻止任何“强制”推送在所有分支机构中工作。

如果你想要更精细的预分支控制,那么你将不得不在远程存储库上使用'hook',可能是'update'钩子。

有一个名为'update-paranoid'的示例更新挂钩可能会在'contrib'文件夹中的git发行版中执行您需要的内容(以及更多内容)。

gitweb link


3
投票

我写了这个快速更新钩子,以防止在存储库中的“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

3
投票

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

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

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

更多细节 - https://help.github.com/articles/defining-the-mergeability-of-pull-requests/

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

© www.soinside.com 2019 - 2024. All rights reserved.