원티드 프론트엔드 프리온보딩 (22.12.19 월 ~ 23.01.20 금)
📍git hook
- git 에서 특정 이벤트 발생하기 전, 후로 특정 hook 동작을 실행할 수 있게 하는 것
예) commit, push 전 후 lint
- 모든 팀원들의 코드 컨벤션을 강제적으로 통일
pre-commit hook 또는 pre-push hook 을 통해서..
- 설정이 까다로워서 husky 라이브러리의 도움을 받음
📍husky
- git hook 설정을 도와주는 라이브러리
- 번거로운 git hook 설정이 편함
- (팀 프로젝트 시, 최초 생성자가 만든 프로젝트를 클론한 뒤) npm install 과정에서 사전에 세팅해둔 git hook을 모두 적용시킬 수 있어서 팀원들이 편리
- husky를 통해 pre-commit, pre-push hook 을 설정 가능
📍husky 설치
1. npm i husky -D
2. (최초 생성자만) npx husky install
✅husky - Git hooks installed 라는 메시지 뜨면 성공
- add postinstall script in package.json
클론 받아서 사용하는 사람들이, npm i 이후에 자동으로 husky install이 될 수 있도록 하는 설정
// package.json
{
"scripts": {
"postinstall": "husky install"
},
}
3. npm scripts 설정
// package.json
{
"scripts": {
"postinstall": "husky install",
"format": "prettier --cache --write .",
"lint": "eslint --cache .",
},
}
4. pre-commit, pre-push hook 추가
commit 전 prettier 실행 강제
- npx husky add .husky/pre-commit "npm run format"
✅husky - created .husky/pre-commit 나오면 성공
commit 전 eslint 실행 강제
- npx husky add .husky/pre-push "npm run lint"
✅husky - created .husky/pre-push 나오면 성공
master로 직접 push 방지
- 아래 스크립트 직접 작성 (수정 필요)
#!/bin/sh
FORBIDDEN_HTTPS_URL="https://github.com/gabia/git-hooks-study.git" # insert your remote url (https)
FORBIDDEN_SSH_URL="git@github.com:gabia/git-hooks-study.git" # insert your remote url (ssh)
FORBIDDEN_REF="refs/heads/master" # 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 master"
exit 1 # 금지된 ref 로 push 를 실행하면 에러
fi
exit 0
📍참고
https://library.gabia.com/contents/8492/