Merge 된 브랜치 자동 삭제
브랜치 생성 → 작업 → PR → Merge 후에 브랜치를 수동적으로 삭제해줘야 되는 번거로움이 있습니다. 이는 GIT에서 Merge된 브랜치를 자동적으로 삭제해주는 기능을 통해서 개선할 수 있었습니다. (계속해서 깜빡하는 불필요한 브랜치 삭제… 😓)
(GIT Repository - Setting 설정에서 찾아 봅시다!)
.git 폴더 안의 hooks 폴더로 갑니다.
여기서 사용할 것은 prepare-commit-msg
입니다.
확장자인 .sample
를 제거합니다.
내용을 작성!!
#!/bin/bash
Font_RED='\\033[91m'
Font_CLEAR='\\033[0m' # No Color
PREFIX_LIST=(
feat
refactor
fix
style
setting
test
docs
)
if [ -z "$BRANCHES_TO_SKIP" ]; then
BRANCHES_TO_SKIP=("main" "develop")
fi
BRANCH_NAME=$(git symbolic-ref --short HEAD)
BRANCH_NAME="${BRANCH_NAME##*/}"
JIRA_ID=`echo $BRANCH_NAME | egrep -o '^\\w.-[0-9]+'`
JIRA_ID=`echo $JIRA_ID | tr '[:lower:]' '[:upper:]'`
COMMIT_MESSAGE="$(cat $1)"
PREFIX=`echo $COMMIT_MESSAGE | cut -d ':' -f1 | sed 's/ *$//g'`
MESSAGE=`echo $COMMIT_MESSAGE | cut -d ':' -f2`
BRANCH_EXCLUDED=$(printf "%s\\n" "${BRANCHES_TO_SKIP[@]}" | grep -c "^$BRANCH_NAME$")
BRANCH_IN_COMMIT=$(grep -c "$JIRA_ID" $1)
TICKET=[$(git rev-parse --abbrev-ref HEAD | grep -Eo '^(\\w+/)?(\\w+[-_ ])?[0-9]+' | grep -Eo '(\\w+[-])?[0-9]+' | tr "[:lower:]" "[:upper:]")]
COMMIT_SOURCE=$2
if [[ $BRANCH_EXCLUDED -eq 1 || "$COMMIT_MESSAGE" == "$TICKET"* || "${COMMIT_SOURCE}" = merge ]];then
exit 0;
fi
if ! [[ "$COMMIT_MESSAGE" =~ ":" ]];then
printf "${Font_RED}Prefix 구분을 위해 : (세미콜론)이 필요합니다.${Font_CLEAR}\\n"
exit 1
fi
if !(printf '%s\\n' "${PREFIX_LIST[@]}" | grep -xq $PREFIX); then
printf "${Font_RED}[${PREFIX}] 는 존재 하지 않는 Prefix 입니다.${Font_CLEAR}\\n"
echo "사용가능한 Prefix 목록"
printf '%s\\n' "${PREFIX_LIST[@]}"
exit 1
fi
if [ -n $JIRA_ID ] && ! [[ $BRANCH_IN_COMMIT -ge 1 ]]; then
echo "[$JIRA_ID] $PREFIX: $MESSAGE" > $1
fi
⁉️ 파일 권한 설정을 잊으면 안됩니다!! (권한 설정이 없으면 작동하지 않음.)
chmod +x .husky/prepare-commit-msg
끗.
npm 초기화 & husky 설치
# npm 초기화 & package.json 생성
npm init
↖ npm 초기화 하게 되면 package.json이 파일이 생성됩니다. (초기화 시, 설정 입력란이 나오는데 전부 Enter로 넘어가도 됩니다!)
# husky 다운로드
npx husky-init && npm install
↖ 명령어 실행 시, husky가 다운로드 진행되고…
↖ 다운로드가 완료되면, **.husky
**를 디렉토리가 생성됩니다.
그와 함께 **package.json
**에 변경사항이 있다면, **package-lock.json
**도 함께 생기게 됩니다.
(이미 변경이력이 있다면 **package-lock.json
**은 이미 존재할 것입니다. )
그럼 이제 **package.json
**를 수정해볼까요?
{
"scripts": {
"prepare": "husky install"
},
"devDependencies": {
"husky": "^8.0.1"
}
}
위와 같이 변경 한다면 깔끔 하겠죠? 😁
(**package-lock.json
**가 의존성 정보를 모두 가지고 있으므로, 필요 구문 외에 삭제해도 무방)
prepare-commit-msg
파일 생성
# hook 파일 생성
vi .husky/prepare-commit-msg
그리고 내용은 아래와 같이 작성해주세요.
(PREFIX_LIST
, BRANCHES_TO_SKIP
등은 보시고 수정해주셔야 됩니다!)
#!/bin/bash
Font_RED='\\033[91m'
Font_CLEAR='\\033[0m' # No Color
PREFIX_LIST=(
feat
refactor
fix
style
setting
test
docs
)
if [ -z "$BRANCHES_TO_SKIP" ]; then
BRANCHES_TO_SKIP=("main" "develop")
fi
BRANCH_NAME=$(git symbolic-ref --short HEAD)
BRANCH_NAME="${BRANCH_NAME##*/}"
JIRA_ID=`echo $BRANCH_NAME | egrep -o '^\\w.-[0-9]+'`
JIRA_ID=`echo $JIRA_ID | tr '[:lower:]' '[:upper:]'`
COMMIT_MESSAGE="$(cat $1)"
PREFIX=`echo $COMMIT_MESSAGE | cut -d ':' -f1 | sed 's/ *$//g'`
MESSAGE=`echo $COMMIT_MESSAGE | cut -d ':' -f2`
BRANCH_EXCLUDED=$(printf "%s\\n" "${BRANCHES_TO_SKIP[@]}" | grep -c "^$BRANCH_NAME$")
BRANCH_IN_COMMIT=$(grep -c "$JIRA_ID" $1)
TICKET=[$(git rev-parse --abbrev-ref HEAD | grep -Eo '^(\\w+/)?(\\w+[-_ ])?[0-9]+' | grep -Eo '(\\w+[-])?[0-9]+' | tr "[:lower:]" "[:upper:]")]
COMMIT_SOURCE=$2
if [[ $BRANCH_EXCLUDED -eq 1 || "$COMMIT_MESSAGE" == "$TICKET"* || "${COMMIT_SOURCE}" = merge ]];then
exit 0;
fi
if ! [[ "$COMMIT_MESSAGE" =~ ":" ]];then
printf "${Font_RED}Prefix 구분을 위해 : (세미콜론)이 필요합니다.${Font_CLEAR}\\n"
exit 1
fi
if !(printf '%s\\n' "${PREFIX_LIST[@]}" | grep -xq $PREFIX); then
printf "${Font_RED}[${PREFIX}] 는 존재 하지 않는 Prefix 입니다.${Font_CLEAR}\\n"
echo "사용가능한 Prefix 목록"
printf '%s\\n' "${PREFIX_LIST[@]}"
exit 1
fi
if [ -n $JIRA_ID ] && ! [[ $BRANCH_IN_COMMIT -ge 1 ]]; then
echo "[$JIRA_ID] $PREFIX: $MESSAGE" > $1
fi
⁉️ 파일 권한 설정을 잊으면 안됩니다!! (권한 설정이 없으면 작동하지 않음.)
chmod +x .husky/prepare-commit-msg
끗.
🐶 이제 잘 작동되는지 확인해볼까요?
잘못된 형식의 커밋 메시지 사용 시
올바른 커밋 메시지 사용 시, 커밋 성공!