我試圖設置一個git鉤子,它將不允許任何人刪除我們倉庫的master,alpha和beta分支。有人能幫忙嗎?我從來沒有做過一個git鉤子,所以我不想在沒有一點幫助的情況下開發自己的運氣。不允許在Git中刪除Master分支
在此先感謝。
我試圖設置一個git鉤子,它將不允許任何人刪除我們倉庫的master,alpha和beta分支。有人能幫忙嗎?我從來沒有做過一個git鉤子,所以我不想在沒有一點幫助的情況下開發自己的運氣。不允許在Git中刪除Master分支
在此先感謝。
直接與pre-receive
掛鉤。假設您使用的是裸露的中央存儲庫,請在your-repo.git/hooks/pre-receive
中放置以下代碼,並且不要忘記chmod +x your-repo.git/hooks/pre-receive
。
#! /usr/bin/perl
# create: 00000... 51b8d... refs/heads/topic/gbacon
# delete: 51b8d... 00000... refs/heads/topic/gbacon
# update: 51b8d... d5e14... refs/heads/topic/gbacon
my $errors = 0;
while (<>) {
chomp;
next
unless m[^
([0-9a-f]+) # old SHA-1
\s+
([0-9a-f]+) # new SHA-1
\s+
refs/heads/(\S+) # ref
\s*
$
]x;
my($old,$new,$ref) = ($1,$2,$3);
next unless $ref =~ /^(master|alpha|beta)$/;
die "$0: deleting $ref not permitted!\n"
if $new =~ /^0+$/;
}
exit $errors == 0 ? 0 : 1;
如果您很高興通過'push'拒絕所有分支刪除,那麼您可以在存儲庫上將config變量receive.denyDeletes
設置爲true
。
如果您確實需要更復雜的控制,我建議您查看git分配的contrib/hooks
文件夾中的update-paranoid
鉤子。它允許你設置每個參考acls,它可以做一些事情,例如拒絕非快速轉發,並通過推送以及一些更復雜的行爲來拒絕刪除。
update-paranoid
應該做你需要的一切,而不必編寫自己的鉤子。