새로운 지점이 Git에서 체크 아웃 된 후 고리를 트리거하는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/1011557

  •  06-07-2019
  •  | 
  •  

문제

새로운 지점이 Git에서 체크 아웃 된 후 고리를 트리거하는 방법이 있습니까?

도움이 되었습니까?

해결책

이 후크 중 하나가 그렇게하지 않으면 놀랄 것입니다.

https://schacon.github.io/git/githooks.html

아마도 이 하나:

체크 아웃 후

이 후크는 작업장을 업데이트 한 후 Git-Checkout이 실행될 때 호출됩니다. 후크에는 세 가지 매개 변수가 주어집니다. 이전 헤드의 심판, 새 헤드의 심판 (변경되었거나 변경되지 않았을 수도 있음) 및 체크 아웃이 지점 체크 아웃인지 (분기 변경, 플래그 = 1)인지를 나타내는 플래그 파일 체크 아웃 (색인에서 파일 검색, flag = 0). 이 후크는 Git-Checkout의 결과에 영향을 줄 수 없습니다.

다른 팁

Git Hook는 저장소의 특별한 위치에 배치 된 스크립트입니다. 해당 위치는 다음과 같습니다.

.git/후크

스크립트는 환경에서 실행할 수있는 모든 종류 일 수 있습니다. 즉, Bash, Python, Ruby 등.

결제 후 실행 된 후크는 다음과 같습니다 체크 아웃 후. 문서에서 :

... 후크에 세 가지 매개 변수가 주어집니다 ...

예시:

  1. 후크 생성 (스크립트) :

    touch .git/hooks/post-checkout
    chmod u+x .git/hooks/post-checkout
    
  2. 후크 샘플 콘텐츠 :

#!/bin/bash                                                                      

set -e                                                                           

printf '\npost-checkout hook\n\n'                                                

prevHEAD=$1                                                                      
newHEAD=$2                                                                       
checkoutType=$3                                                                  

[[ $checkoutType == 1 ]] && checkoutType='branch' ||                             
                            checkoutType='file' ;                                

echo 'Checkout type: '$checkoutType                                              
echo '    prev HEAD: '`git name-rev --name-only $prevHEAD`                       
echo '     new HEAD: '`git name-rev --name-only $newHEAD`

참고 : 첫 번째 줄의 Shebang은 스크립트 유형을 나타냅니다.

이 스크립트 (Git Hook)는 전달 된 세 매개 변수 만 캡처하여 인간 친화적 인 형식으로 인쇄합니다.

다른 사람과 유사하지만 지점이 한 번 체크 아웃되었는지 확인합니다.

#!/bin/bash

# this is a file checkout – do nothing
if [ "$3" == "0" ]; then exit; fi

BRANCH_NAME=$(git symbolic-ref --short -q HEAD)
NUM_CHECKOUTS=`git reflog --date=local | grep -o ${BRANCH_NAME} | wc -l`

#if the refs of the previous and new heads are the same 
#AND the number of checkouts equals one, a new branch has been created
if [ "$1" == "$2"  ] && [ ${NUM_CHECKOUTS} -eq 1 ]; then
    git push origin ${BRANCH_NAME}
fi

그만큼 post-checkout 세 가지 매개 변수를 수신합니다.

  1. 이전 머리의 심판
  2. 새로운 머리의 심판
  3. 이것이 파일 체크 아웃인지 여부0) 또는 분기 체크 아웃 (1)

현재 헤드에서 생성 된 분기가 매개 변수 1과 2에 대해 동일한 값을 가질 것이라는 사실을 사용할 수 있습니다.

cat > .git/hooks/post-checkout <<"EOF"
if [ "$3" == "0" ]; then exit; fi
if [ "$1" == "$2" ]; then 
  echo "New branch created. (Probably)."
fi
EOF

chmod u+x .git/hooks/post-checkout

제한 사항 :

  • 현재 머리와 같은 머리에있는 기존 지점을 확인하면이를 속일 것입니다.
  • 새 지점 만들기 ~ 아니다 현재 헤드에서는 감지되지 않습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top