티스토리 뷰

탐방

Git Hooks

김도리개발자 2022. 10. 31. 15:10

Git Hooks

Git과 관련한 어떤 이벤트가 발생했을 때 자동으로 특정 스크립트를 실행하도록 할 수 있는 것

꼭 지켜야 하는 코딩스타일이나 테스트코드, 등등의 정책들을 강제하기 위해 Git Hooks를 사용할 수 있다.

 

commit이나 merge 할 때 클라이언트 훅이 실행되고,

push 할 때 서버 훅이 실행된다.

 

Git Hooks을 반드시 적용하게끔 강제하기 위해

만약 프로젝트가 npm을 사용하고 있다면 husky라는 모듈을 사용하자

 

husky

Git Hooks를 보다 쉽게 적용할 수 있는 npm 모듈

husky 설치

npm install --save-dev husky

 

commit 정책 정의하기

.huskyrc 파일에 정의하고자 하는 훅과 실행할 명령어 지정

{
    "hooks {
        "pre-commit": "echo 'commit 정책임'"
    }
}

이 방법을 통해 프로젝트별 commit, push 등의 정책을 관리 및 공유할 수 있다.

작업자가 의존 모듈을 설치하는 것만으로 husky가 적용된다.

 

husky 동작 방식

package.json을 확인해보면 install 스크립트를 정의하고 있다.

{
    ...,
    "scripts": {
        ...,
        "install": "node husky install",
        ...,
    }
}

 

main로 직접 push 방지하기

huskyhooks 디렉토리 생성 후 그 안에 pre-push 스크립트 파일을 만들어 작성한다.

#!/bin/sh
​
FORBIDDEN_HTTPS_URL="(https git 주소)" # insert your remote url (https)
FORBIDDEN_SSH_URL="(ssh git 주소)" # insert your remote url (ssh)
FORBIDDEN_REF="refs/heads/main" # insert branch ref
​
ARR_GIT_PARAMS=($(echo $HUSKY_GIT_PARAMS))
ARR_GIT_STDIN=($(echo $HUSKY_GIT_STDIN))
​
remote=${ARR_GIT_PARAMS[0]}
url=${ARR_GIT_PARAMS[1]}
​
local_ref=${ARR_GIT_STDIN[0]}
local_sha=${ARR_GIT_STDIN[1]}
remote_ref=${ARR_GIT_STDIN[2]}
remote_sha=${ARR_GIT_STDIN[3]}
​
if [ "$url" != "$FORBIDDEN_HTTPS_URL" -a "$url" != "$FORBIDDEN_SSH_URL" ]
then
    exit 0 # Forked Project 에서는 제한하지 않음
fi
​
if [ "$remote_ref" == "$FORBIDDEN_REF" ]
then
    echo "DO NOT PUSH it main"
    exit 1 # 금지된 ref 로 push 를 실행하면 에러
fi
​
exit 0

.huskyrc 파일에 pre-push훅이 위의 스크립트를 실행하도록 정의한다.

{
    "hooks": {
        "pre-commit": "echo 'commit 정책임'",
        "pre-push": "./huskyhooks/pre-push"
    }
}

이렇게 적용하고 나면 main으로 push했을 때 에러메시지가 뜨며 push 실패한다.

 

 

출처 : https://library.gabia.com/contents/8492/

 

가비아 라이브러리

IT 콘텐츠 허브

library.gabia.com

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함