수색…


소개

다른 많은 버전 제어 시스템과 마찬가지로 Git은 특정 중요한 작업이 발생할 때 사용자 정의 스크립트를 실행하는 방법을 제공합니다. 이 훅에는 클라이언트 측과 서버 측의 두 그룹이 있습니다. 클라이언트 쪽 후크는 커밋 및 병합과 같은 작업에 의해 트리거되는 반면 서버 쪽 후크는 밀어 넣기 된 커밋 수신과 같은 네트워크 작업에서 실행됩니다. 모든 종류의 이유에 대해 이러한 후크를 사용할 수 있습니다.

훅 설치

후크는 모두 Git 디렉토리의 hooks 하위 디렉토리에 저장됩니다. 대부분의 프로젝트에서 그것은 .git/hooks 입니다.

후크 스크립트를 사용하려면 .git 디렉토리의 hooks 하위 디렉토리에 파일을 넣습니다.이 디렉토리는 확장명없이 적절하게 지정되고 실행 가능합니다.

Git pre-push hook

pre-push 스크립트는 원격 상태를 확인한 후에 git push 의해 호출되지만 아무 것도 푸시되기 전에 호출됩니다. 이 스크립트가 0이 아닌 상태로 종료되면 아무 것도 푸시되지 않습니다.

이 후크는 다음 매개 변수와 함께 호출됩니다.

 $1 -- Name of the remote to which the push is being done (Ex: origin)
 $2 -- URL to which the push is being done (Ex: https://<host>:<port>/<username>/<project_name>.git)

푸시 된 커밋에 대한 정보는 다음과 같은 형식으로 표준 입력에 대한 줄로 제공됩니다.

<local_ref> <local_sha1> <remote_ref> <remote_sha1>

샘플 값 :

local_ref = refs/heads/master
local_sha1 = 68a07ee4f6af8271dc40caae6cc23f283122ed11
remote_ref = refs/heads/master
remote_sha1 = efd4d512f34b11e3cf5c12433bbedd4b1532716f

아래 예제 pre-push 스크립트는 pre-push.sample 기본 설정에서 가져 왔습니다.이 설정은 새로운 저장소가 git init 초기화 될 때 자동으로 생성됩니다.

# This sample shows how to prevent push of commits where the log message starts
# with "WIP" (work in progress).

remote="$1"
url="$2"

z40=0000000000000000000000000000000000000000

while read local_ref local_sha remote_ref remote_sha
do
    if [ "$local_sha" = $z40 ]
    then
        # Handle delete
        :
    else
        if [ "$remote_sha" = $z40 ]
        then
            # New branch, examine all commits
            range="$local_sha"
        else
            # Update to existing branch, examine new commits
            range="$remote_sha..$local_sha"
        fi

        # Check for WIP commit
        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


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow