-
[git] 커밋 메시지에 preifx 붙이기는 git hookDev 2025. 4. 7. 01:22반응형
커밋 메시지에 자동으로 prefix를 붙이는 git hook을 만들어보겠습니다.
# 0. git hook 만들기
처음 git hook을 만든다면 기본적으로 아래 3가지 단계를 거쳐야 합니다.
- .git/hooks/ 경로에 파일 생성
- 실행 권한 부여
- 원하는 프리픽스를 넣는 스크립트 작성
실행 권한 부여는 아래 커멘드를 입력합니다.
만약 스크립트 파일 이름을 prepare-commit-msg 라고 지었다고 가정하면 아래 커멘드를 입력하면 됩니다.chmod +x .git/hooks/prepare-commit-msg
# 1. 기본 > git hook으로 프리픽스 붙이기
"[LOGIN]" 프리픽스를 자동으로 붙이는 git hook을 만들어 보겠습니다.
#!/bin/sh PREFIX="[LOGIN]" # 커밋 메시지 파일 경로는 첫 번째 인자로 들어옴 COMMIT_MSG_FILE=$1 # 메시지에 이미 프리픽스가 있으면 패스 if ! grep -q "$PREFIX" "$COMMIT_MSG_FILE"; then sed -i.bak "1s/^/$PREFIX /" "$COMMIT_MSG_FILE" fi
# 2. 응용 > 브랜치 이름으로 프리픽스 붙이기
브랜치 이름을 가져오고 싶다면, 아래처럼 가져올 수 있습니다.
BRANCH_NAME=$(git symbolic-ref --short HEAD) PREFIX="[${BRANCH_NAME}]"
그리고 일반적으로 브랜치를 만들 때 "/" 를 기준으로 폴더를 구분합니다. 따라서 위 커멘트를 그대로 사용하면 아래와 같은 에러가 발생합니다.
sed: 1: "1s/^/[~~~] /": bad flag in substitute command: 'n'
현재 sed 명령어에서 "/" 가 구분자로 쓰이고 있는데, 브랜치 이름에서도 "/" 가 들어가니까 문제라는 말입니다.
이 경우 sed 명령어에서 다른 구분자를 사용해주면 문제가 없겠죠? "|", "#" #@" 같은 것들도 쓸 수 있다고 합니다.
따라서 "|" 로 바꿔서 브랜치 명을 가져온다면, 아래와 같이 만들 수 있습니다.#!/bin/sh COMMIT_MSG_FILE=$1 BRANCH_NAME=$(git symbolic-ref --short HEAD) PREFIX="[${BRANCH_NAME}]" # 이미 프리픽스가 있으면 중복 방지 if ! grep -q "$PREFIX" "$COMMIT_MSG_FILE"; then sed -i.bak "1s|^|$PREFIX |" "$COMMIT_MSG_FILE" fi
# 3. 응용 > 브랜치 이름 중 마지막만 가져오기
만약 대부분의 브랜치를 feature/ 와 같은 경우로 만든다면, feature/ 가 계속 반복되는 게 큰 의미가 없을 수 있습니다.
feature/ 뒤에 붙은 것만 사용하는 방법을 알아보겠습니다.브랜치 이름을 / 를 기준으로 나누고 제일 마지막만 가져오는 스크립트 입니다.
#!/bin/sh COMMIT_MSG_FILE=$1 # 현재 브랜치 이름 얻기 BRANCH_NAME=$(git symbolic-ref --short HEAD) # "/" 기준으로 나눠서 마지막 조각만 추출 PREFIX_PART=${BRANCH_NAME##*/} # 예: "feature/9nav" → "9nav" PREFIX="[${PREFIX_PART}]" # 커밋 메시지에 이미 프리픽스가 있다면 추가하지 않음 if ! grep -q "$PREFIX" "$COMMIT_MSG_FILE"; then sed -i.bak "1s|^|$PREFIX |" "$COMMIT_MSG_FILE" fi
참고로 마지막 문자열을 가져오는 문법은 별도로 정리해봤습니다. (https://woongs.tistory.com/77)
감사합니다.
반응형'Dev' 카테고리의 다른 글
[Bash] 패턴 제거, 특정 패턴의 마지막 가져오기 (0) 2025.04.07 Visual Studio Code - Short cut Cheet sheet (0) 2024.04.30 NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+ 에러 해결 (0) 2024.03.16 [Draw.io] 클래스 다이어그램 편집하기 (0) 2023.03.10 [git] revert 할 수 없을 때, commit revert is a merge but no -m option was given. (0) 2022.08.29