[英]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.