새로운 지점이 Git에서 체크 아웃 된 후 고리를 트리거하는 방법이 있습니까?
문제
새로운 지점이 Git에서 체크 아웃 된 후 고리를 트리거하는 방법이 있습니까?
해결책
이 후크 중 하나가 그렇게하지 않으면 놀랄 것입니다.
https://schacon.github.io/git/githooks.html
아마도 이 하나:
체크 아웃 후
이 후크는 작업장을 업데이트 한 후 Git-Checkout이 실행될 때 호출됩니다. 후크에는 세 가지 매개 변수가 주어집니다. 이전 헤드의 심판, 새 헤드의 심판 (변경되었거나 변경되지 않았을 수도 있음) 및 체크 아웃이 지점 체크 아웃인지 (분기 변경, 플래그 = 1)인지를 나타내는 플래그 파일 체크 아웃 (색인에서 파일 검색, flag = 0). 이 후크는 Git-Checkout의 결과에 영향을 줄 수 없습니다.
다른 팁
Git Hook는 저장소의 특별한 위치에 배치 된 스크립트입니다. 해당 위치는 다음과 같습니다.
.git/후크
스크립트는 환경에서 실행할 수있는 모든 종류 일 수 있습니다. 즉, Bash, Python, Ruby 등.
결제 후 실행 된 후크는 다음과 같습니다 체크 아웃 후. 문서에서 :
... 후크에 세 가지 매개 변수가 주어집니다 ...
예시:
후크 생성 (스크립트) :
touch .git/hooks/post-checkout chmod u+x .git/hooks/post-checkout
후크 샘플 콘텐츠 :
#!/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
훅 세 가지 매개 변수를 수신합니다.
- 이전 머리의 심판
- 새로운 머리의 심판
- 이것이 파일 체크 아웃인지 여부
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
제한 사항 :
- 현재 머리와 같은 머리에있는 기존 지점을 확인하면이를 속일 것입니다.
- 새 지점 만들기 ~ 아니다 현재 헤드에서는 감지되지 않습니다.