我想知道有没有办法阻止存储库中的“git push --force
”(仅在主分支上)?
假设我有远程git存储库并执行:
git push
''掌握'。它有效。git push --force
'到'branch-1'。它有效。git push --force
''掌握'。它被拒绝了。甚至可能吗?
感谢您提供任何答案和建议。
BR, 的Dawid。
答案 0 :(得分:46)
设置配置变量:
receive.denyNonFastForwards
receive.denyDeletes
将阻止任何“强制”推送在所有分支机构中工作。
如果你想要更精细的预分支控制,那么你将不得不在远程存储库上使用'hook',可能是'update'钩子。
有一个名为'update-paranoid'的示例更新挂钩,可能会在'contrib'文件夹中的git发行版中执行您需要的内容(以及更多内容)。
答案 1 :(得分: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
答案 2 :(得分:3)
Github已经引入了受保护分支的概念!
可以在Settings -> Branches -> Protected Branches
下找到。功能现在可供所有用户使用 - 不仅仅是企业!
这"保护"可以为任何分支和任何用户启用,包括管理员。
此处有更多详情 - https://help.github.com/articles/defining-the-mergeability-of-pull-requests/
因此不再需要钩子和任意代码。