ABOUT ME

Contact.
Email:yj.anthonyjo@gmail.com
Introduce : CS Student.

Today
-
Yesterday
-
Total
-
  • Git flow - 브랜치 이름 컨벤션, git hook으로 커밋에 이슈 번호 자동 추가
    프로그래밍/프로그래밍 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

    반응형

    댓글

Designed by Tistory.