GitNotes.56-1.md
본 문서는 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)

반응형

+ Recent posts