프로그래밍/프로그래밍

Git flow - 브랜치 이름 컨벤션, git hook으로 커밋에 이슈 번호 자동 추가

꿈꾸는 사람_Anthony 2021. 12. 18. 22:35
반응형

깃깃깃깃갓갓갓갓. 차이가 느껴지는가? 아니? 깃은 갓(신)이다. 깃을 숭배하라!!

각설하자.. 멘탈차려!!

브랜치 이름 컨벤션

  • main or master
  • develop
  • feature-{issue_number}-{feature_name}
  • release-(version_number)
  • Hotfix-(Issue_number)

일반적으로, 이 형식으로 진행된다고 한다.
자세한 것은, git flow naming convention 등으로 검색해보자.
필자는, {issue_number}-{issue_description, feature_name etc..}의 방식을 택하였다.

git hook을 이용한 커밋에 이슈번호 자동추가

git hook은 git폴더/.git/hooks/에 존재한다.
여기서, prepare-commit-msg파일을 만들 것이다.

주어지는 샘플은 참고용이다. 사용하고자 하면 사용하면 된다.

아래 코드를 git폴더 git폴더/.git/hooks/prepare-commit-msg파일로 만들어주면 된다.
몇가지 방식이 있다.

[이슈번호]방식

#!/bin/sh
# .git/hooks/prepare-commit-msg
#
# Automatically add branch name and branch description to every commit message except merge commit.
# https://stackoverflow.com/a/18739064
#

COMMIT_EDITMSG=$1

addBranchNumber() {
  NAME=$(git branch | grep '*' | sed 's/* //') 
  ISSUE_NUMBER=`echo $NAME | cut -d '-' -f1`
  DESCRIPTION=$(git config branch."$NAME".description)
  echo "[#$ISSUE_NUMBER]  $(cat $COMMIT_EDITMSG)" > $COMMIT_EDITMSG
  if [ -n "$DESCRIPTION" ] 
  then
     echo "" >> $COMMIT_EDITMSG
     echo $DESCRIPTION >> $COMMIT_EDITMSG
  fi 
}

MERGE=$(cat $COMMIT_EDITMSG|grep -i 'merge'|wc -l)

if [ $MERGE -eq 0 ] ; then
  addBranchNumber
fi

[이슈번호-이슈이름]방식(사실, feature/branches/1-hello에서 마지막 슬레시 이후만을 남겨둔다는 설명이 올바르다.)

#!/bin/sh
# .git/hooks/prepare-commit-msg
#
# Automatically add branch name and branch description to every commit message except merge commit.
# https://stackoverflow.com/a/18739064
#

COMMIT_EDITMSG=$1

addBranchNumber() {
  NAME=$(git branch | grep '*' | sed 's/* //' | sed 's/^.*///') 
  DESCRIPTION=$(git config branch."$NAME".description)
  echo "[#$NAME]  $(cat $COMMIT_EDITMSG)" > $COMMIT_EDITMSG
  if [ -n "$DESCRIPTION" ] 
  then
     echo "" >> $COMMIT_EDITMSG
     echo $DESCRIPTION >> $COMMIT_EDITMSG
  fi 
}

MERGE=$(cat $COMMIT_EDITMSG|grep -i 'merge'|wc -l)

if [ $MERGE -eq 0 ] ; then
  addBranchNumber
fi

위 코드에서는 echo "[#$NAME] $cat...을 통하여, 이슈번호 앞에 #을 붙여 github에서 트래킹 가능하도록 하였고, 커밋메시지 작성시 자동으로 ]이후 공백이 하나 추가되도록 하였다.

위 코드들의 응용은 본인의 상황에 맞게 하면 된다.

 


이유는 모르겠으나, 위 코드가 정상작동하지 않는다. 다음을 사용하자.

#!/bin/sh

COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3

/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"

case "$COMMIT_SOURCE,$SHA1" in
 ,|template,)
   /usr/bin/perl -i.bak -pe '
      print "\n" . `git diff --cached --name-status -r`
	 if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;;
 *) ;;
esac

# .git/hooks/prepare-commit-msg
#
# Automatically add branch name and branch description to every commit message except merge commit.
# https://stackoverflow.com/a/18739064
#

COMMIT_EDITMSG=$1

addBranchNumber() {
  NAME=$(git branch | grep '*' | sed 's/* //' | sed 's/^.*\///')
  ISSUE_NUMBER=`echo $NAME | cut -d '-' -f1`
  DESCRIPTION=$(git config branch."$NAME".description)
  echo "[#$ISSUE_NUMBER-$NAME] $(cat $COMMIT_EDITMSG)" > $COMMIT_EDITMSG
  if [ -n "$DESCRIPTION" ]
  then
     echo "" >> $COMMIT_EDITMSG
     echo $DESCRIPTION >> $COMMIT_EDITMSG
  fi
}

MERGE=$(cat $COMMIT_EDITMSG|grep -i 'merge'|wc -l)

if [ $MERGE -eq 0 ] ; then
  addBranchNumber
fi

 

참고 및 출처

git hook

https://myeongjae.kim/blog/2019/02/02/prepare-commit-msg-hook-issue-number
https://medium.com/prnd/github-%EC%BB%A4%EB%B0%8B-%EB%A9%94%EC%84%B8%EC%A7%80%EC%97%90-jira-%EC%9D%B4%EC%8A%88%EB%B2%88%ED%98%B8-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%EB%84%A3%EC%96%B4%EC%A3%BC%EA%B8%B0-779048784037
https://library.gabia.com/contents/8492/
https://gist.github.com/bartoszmajsak/1396344

git flow naming convention

https://deepsource.io/blog/git-branch-naming-conventions/
https://gist.github.com/ihoneymon/a28138ee5309c73e94f9
https://iamcho2.github.io/2021/03/22/branch-rule-git-flow

반응형