본문 바로가기
개발/Git

(Git) 커밋 할 때 자동으로 이슈번호 붙이기

by DinoDev 2024. 8. 16.
728x90
반응형

이슈 관리로 Jira를 사용하는 회사라면 보통 Jira 티켓을 만들고 Jira 티켓에 있는 이슈번호로 branch를 만들어서 commit에도 이슈번호를 붙이는 경우가 있습니다.

 

예를 들면 Jira 이슈 티켓번호가 DINO-1234 라면 commit message는 [DINO-1234] 로 시작하게 됩니다.

 

하지만 사람은 실수를 하게되고 commit message의 이슈 넘버를 잘못 작성하게 되는 경우가 있습니다.

 

이런 문제를 해결하기 위해 git의 prepare-commit-msg 기능을 사용하면 됩니다.

 

.git/hooks 로 이동하기

cd .git/hooks

 

Android Studio라면 프로젝트 폴더 안에 .git 폴더가 있습니다.

Android Studio에서 terminal을 열면 .git이 있는 path로 열려서 바로 위의 명령어를 실행하면 됩니다.

prepare-commit-msg 만들기

nano prepare-commit-msg

prepage-commit-msg를 만들기 위해 nano 명령어를 사용합니다.

그리고 아래 스크립트를 복사해서 붙여줍니다.

  #!/bin/bash
    
    #BRANCH_NAME=$(git symbolic-ref —short HEAD)
    BRANCH_NAME=`git rev-parse --abbrev-ref HEAD`
    BRANCH_NAME="${BRANCH_NAME##*/}"
    RAW_JIRA_ID=$(echo $BRANCH_NAME | egrep -o '[A-Z]+-[0-9]+')
    JIRA_ID="[${RAW_JIRA_ID}]"

    JIRA_ID_IN_COMMIT=$(cat $1 | egrep -o '\[[A-Z]+-[0-9]+\]')
    BRANCH_JIRA_ID_IN_COMMIT=$(grep -c "\[$RAW_JIRA_ID\]" $1)
    
    if [ ${#RAW_JIRA_ID} -gt 0 ] && [ ${#JIRA_ID_IN_COMMIT} -gt 0 ] && [ "$JIRA_ID" != "$JIRA_ID_IN_COMMIT" ]; then
      echo "Replace JIRA ID ($JIRA_ID_IN_COMMIT) in commit message with JIRA ID ($JIRA_ID) in branch"
      QUERY="s/$JIRA_ID_IN_COMMIT/$JIRA_ID/g"
      QUERY="${QUERY/\[/\\[}"
      QUERY="${QUERY/\]/\\]}"
      sed -i.bak -e "$QUERY" $1
    elif [ ${#RAW_JIRA_ID} -gt 0 ] && ! [[ $BRANCH_JIRA_ID_IN_COMMIT -ge 1 ]]; then
      sed -i.bak -e "1s/^/$JIRA_ID /" $1
    fi

붙여넣기 한 다음에 ctrl + x를 누르고 y를 누르고 enter를 누르면 저장까지 완료 됩니다.

권한 변경하기

실제로 동작하기 위해서는 실행권한인 x를 파일에 추가해줘야 합니다.

chmod +x prepare-commit-msg

확인하기

 

마무리

이것을 알기 전에는 저도 커밋할 때마다 항상 오타를 내서 실수를 하곤 했는데 이 기능을 추가하고 나서는 이슈번호를 안붙여도 되서 너무 편해졌습니다.

728x90
반응형