2009-11-18 53 views
38

我在想知道是否有一種方法可以阻止存儲庫上的'git push --force'(僅在master分支上)?有沒有辦法配置git存儲庫來拒絕'git push --force'?

假設我有遠程的Git倉庫,做:

  • 'git push' 到 '主人'。有用。
  • 'git push --force'到'branch-1'。有用。
  • 'git push --force'到'master'。它被拒絕。

它甚至有可能嗎?

感謝您的任何答案和建議。

BR, Dawid。

回答

40

設置配置變量:

receive.denyNonFastForwards 
receive.denyDeletes 

將阻止來自全國各分公司工作的任何「逼」推。

如果你想要更好的預分支控制,那麼你將不得不在遠程存儲庫上使用'鉤子',可能是'更新'鉤子。

有一個名爲'update-paranoid'的示例更新鉤子,它可能會在'contrib'文件夾中的git分發中做你需要的(和更多)。

gitweb link

+3

1的鉤(原始版本:http://git.kernel.org/?p=git​​/git.git;a=blob_plain;f=contrib/hooks/update-paranoid;hb=080cbc1275ac09445136ba429d90b5ec85e92c1c) – VonC 2009-11-18 09:04:27

+4

任何方式爲GitHub做到這一點? – 2012-11-19 16:11:32

+0

GitHub上的'update-paranoid':https://github.com/git/git/blob/master/contrib/hooks/update-paranoid – go2null 2016-08-04 17:58:50

1

我寫了這個更新快鉤,以防止在「開發」分支在倉庫非快速向前更新(推):

#!/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 
相關問題