FEB:)DAIN

git hooks(커밋 메시지에 이슈 번호 자동 입력)와 husky 충돌 개선 본문

코딩/트러블 슈팅

git hooks(커밋 메시지에 이슈 번호 자동 입력)와 husky 충돌 개선

얌2 2023. 7. 20. 15:06
728x90

 

2023.07.04 - [코딩/공부] - 깃 커밋 메시지에 이슈 번호를 자동으로 입력할 순 없을까?

깃 커밋 메시지에 이슈 번호를 자동으로 입력할 순 없을까?

프로젝트 브랜치명 컨벤션이 feat/이슈번호여서, 브랜치명에서 이슈번호만 가져온 다음 커밋할 때마다 커밋 메시지 아래단(footer)에 이슈 번호를 자동으로 입력해주고 싶었다. 자동으로 입력된다

feb-dain.tistory.com

 
2023.07.19 - [기록/프로젝트 카페인] - husky로 prettier, eslint 적용 자동화하기

husky로 prettier, eslint 적용 자동화하기

가끔 팀원 중 한 명이 prettier 적용을 하지 않고 push하는 일이 있었다. 그래서 이런 실수를 아예 방지하기 위해 husky를 이용해 prettier, eslint 적용을 자동화하기로 했다. 1) husky 설치 yarn add -D husky // o

feb-dain.tistory.com

git hooks를 이용해 커밋 메시지에 이슈 번호가 자동으로 입력되도록 설정했는데, husky를 사용하면서 적용 안 되는 문제가 발생했다. husky가 git hook을 이용해 원하는 동작을 하도록 도와주는 라이브러리라 그런 것 같다.
 
해결 방법은 간단하다. (알아내는 과정은 절대 간단하지 않았지만...)
.githooks 파일에서 사용하고 있던 commit-msg 파일을 .husky 폴더에 옮겨주거나 추가해 주면 된다.

#!/bin/bash

COMMIT_MESSAGE_FILE_PATH=$1
MESSAGE=$(cat "$COMMIT_MESSAGE_FILE_PATH")

if [[ $(head -1 "$COMMIT_MESSAGE_FILE_PATH") == '' ]]; then
  exit 0
fi

POSTFIX=$(git branch | grep '\*' | sed 's/* //' | sed 's/^.*\///' | sed 's/^\([^-]*-[^-]*\).*/\1/')

COMMIT_SOURCE=$2
CURRENT_BRANCH=$(git branch --show-current)

if [[ "$CURRENT_BRANCH" != "$POSTFIX" ]] && [ "$COMMIT_SOURCE" != "merge" ] && [[ "$MESSAGE" != *"[#$POSTFIX]"* ]]; then
  printf "%s\n\n[#%s]" "$MESSAGE" "$POSTFIX" > "$COMMIT_MESSAGE_FILE_PATH"
fi

 
두 번째 블로그 포스팅(husky로 prettier, eslint 적용 자동화하기)대로 husky 설정을 해줬다면 문제가 생기지 않았을테지만, 만약 포스팅대로 husky 설정을 하지 않았다면 package.json 파일에 아래 script를 추가해 주면 된다. 

//package.json
"scripts": {
  ...
    "prepare": "cd .. && husky install frontend/.husky && cd frontend",
    "prepare:mac": "cd .. && husky install frontend/.husky && chmod +x frontend/.husky/* && git update-index --chmod=+x && cd frontend"
  },

그리고 prepare 또는 prepare:mac 실행하면 끝이다.

yarn prepare 
yarn prepare:mac

// or

npm run prepare
npm run prepare:mac

- window의 경우, prepare
- mac의 경우, prepare:mac
❗루트 폴더가 아닌 frontend 폴더에만 husky를 설치했기 때문에  "cd .. && frontend/ .husky && cd frontend" 경로 설정을 따로 해주었다. 만약 루트 폴더에서 바로 husky를 설치했다면 "prepare": "husky install"만 해줘도 된다. 

728x90