簡體   English   中英

是否可以禁用“push force”,它會覆蓋存儲庫的“master”主干?

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

這仍然允許您刪除/創建主分支並強制推送到其他分支,但會阻止您強制推送到主分支本身。

可以通過設置全局禁用強制推動

  • receive.denyNonFastForwards
  • receive.denyDeletes

但這會為每個分支關閉它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM