[英]Is it possible to disable do “push force”, which overwrite “master” trunk of repository?
对于主干“master”,我可以对先前的提交执行“git reset hard”,然后“git push force”,在存储库中重写它。 在这次提交之后,我失去了部分开发。 但是如果对某些分支机构而言并不那么重要,那么对于主干“主”来说非常关键。 是否可以禁用“push force”,它会覆盖存储库的“master”主干,如何关闭它?
我遇到过的每个分支禁用强制推送的唯一方法是使用预接收挂钩,如https://github.com/olshanov/git-hooks/blob/master/pre-receive所示。 .deny-force-push-to-branches (我没有写这个钩子,但它很有用)。
关键部分是
while read oldrev newrev ref ; do
# old revision is blank - branch creation
if [ "$oldrev" = "0000000000000000000000000000000000000000" ] ||
# new revision is blank - branch deletion
[ "$newrev" = "0000000000000000000000000000000000000000" ] ||
# branch != master - pass through
[ "$ref" != "refs/heads/master" ] ;
then
# create new or delete old branch
# or force pushing to non-master branch
continue;
fi
base=$(git merge-base $oldrev $newrev);
if [ "$base" != "$oldrev" ] ; then
# non fast forward merge
echo "Force pushing of $ref is forbidden to master";
exit 1;
fi
done
exit 0;
这仍然允许您删除/创建主分支并强制推送到其他分支,但会阻止您强制推送到主分支本身。
可以通过设置全局禁用强制推动
但这会为每个分支关闭它们
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.