2010-01-07 5 views
8

우리 리포지토리의 마스터, 알파 및 베타 브랜치를 삭제할 수 없도록 설정할 후크를 설정하려고합니다. 아무도 이것으로 도울 수 있습니까? 나는 작은 도움없이 내 자신의 개발에 내 운을 시험하고 싶지 않아 그래서 망할 훅을 한 적이있다.git에서 master 브랜치를 Dissallow로 삭제

미리 감사드립니다.

답변

7

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; 
7

'푸시'를 통해 모든 분기 삭제를 거부하면 저장소의 구성 변수 receive.denyDeletestrue으로 설정할 수 있습니다.

더 정교한 제어가 필요한 경우 자식 배포판 contrib/hooks 폴더의 update-paranoid 후크를 살펴 보는 것이 좋습니다. 이 기능을 사용하면 푸시를 통한 빨리 감기를 거부하고 삭제를 거부하는 것과 같은 작업을 수행 할 수있는 ref acls를 설정하고 좀 더 정교한 동작을 수행 할 수 있습니다.

update-paranoid은 자신 만의 훅을 쓰지 않아도 필요한 모든 것을 처리해야합니다.

관련 문제