Git flow - 브랜치 이름 컨벤션, git hook으로 커밋에 이슈 번호 자동 추가
깃깃깃깃갓갓갓갓. 차이가 느껴지는가? 아니? 깃은 갓(신)이다. 깃을 숭배하라!!
각설하자.. 멘탈차려!!
브랜치 이름 컨벤션
- 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