본 문서는 Git Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
Section 56.1: Git pre-push hook
pre-push 스크립트는 git push
명령에 의해 호출되며, 원격 저장소의 상태를 확인한 후 실제 push 를 수행하기 직전에 실행된다.
만약 이 스크립트가 0 이 아닌 다른 상태값을 반환하면서 종료할 경우, 아무것도 실제로 push 되지 않을 것이다.
이 hook 은 아래와 같은 파라미터와 함께 불릴 것이다:
$1 -- push 가 수행될 원격 저장소의 이름 (예: origin)
$2 -- push 가 이루어질 원격 저장소의 URL 정보 (예: https://://.git)
push 될 커밋들에 대한 정보는 아래와 같은 형식으로 표준 입력에 줄 단위로 입력된다:
<local_ref> <local_sha1> <remote_ref> <remote_sha1>
값들에 대한 예제:
local_ref = refs/heads/master
local_sha1 = 68a07ee4f6af8271dc40caae6cc23f283122ed11
remote_ref = refs/heads/master
remote_sha1 = efd4d512f34b11e3cf5c12433bbedd4b1532716f
아래의 예제는 git init
을 통해 새롭게 만들어지는 저장소에 자동으로 생성되는 기본 pre-push.sample 파일의 내용이다.
# 이 예제는 로그 메시지가 "WIP" (작업중 - work in progress) 로 시작하는 경우에
# 커밋들을 push 하지 않게 만드는 방법을 보여준다.
remote="$1"
url="$2"
z40=0000000000000000000000000000000000000000
while read local_ref local_sha remote_ref remote_sha
do
if [ "$local_sha" = $z40 ]
then
# 삭제된 경우에 대한 처리
:
else
if [ "$remote_sha" = $z40 ]
then
# 새로운 브랜치인 경우에 해당, 모든 커밋들을 검사한다
range="$local_sha"
else
# 기존 브랜치를 업데이트 하는 경우에 해당, 새로운 커밋들만 검사한다
range="$remote_sha..$local_sha"
fi
# WIP 커밋 존재 여부를 검사한다
commit=`git rev-list -n 1 --grep '^WIP' "$range"`
if [ -n "$commit" ]
then
echo >&2 "Found WIP commit in $local_ref, not pushing"
exit 1
fi
fi
done
exit 0
[출처] https://books.goalkicker.com/GitBook/ (CC BY-SA)
반응형
'번역 > Git Notes for Professionals' 카테고리의 다른 글
57: Git rerere 사용하기 (0) | 2020.05.19 |
---|---|
56.2: Hook 설치하기 (0) | 2020.05.19 |
56: Git Client-Side Hook 설정하기 (0) | 2020.05.18 |
55: Ubuntu Bash 상에서 Git 브랜치 이름 표시하기 (0) | 2020.05.18 |
54.1: Reference 내의 객체 이름 변경하기 (0) | 2020.05.14 |