티스토리 뷰
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/
'탐방' 카테고리의 다른 글
방어적 프로그래밍 (Defensive Programming) (0) | 2022.10.29 |
---|---|
ESLint와 Prettier (0) | 2022.10.28 |
ECMAScript에 대해 알아보자 (0) | 2022.10.27 |
[RPA][UiPath] 반복되는 작업에 지친 개발자들의 다음 스텝은? (0) | 2021.09.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- springboot
- LOKI
- RDS
- js
- 리액트
- github action
- subnet
- 서버
- 모니터링
- ecr
- ALB
- javascript
- redux
- Hook
- Docker
- CSS
- ECS
- VPC
- html
- SG
- Grafana Alert
- 인프라
- Service
- Grafana
- react
- Workflow
- 로깅
- ci/cd
- AWS
- EC2
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함