Git Hooks: 커밋 메시지 및 브랜치 이름 적용
이 게시물에서는 git hooks를 사용하여 언급한 두 가지 규칙을 추가하는 방법을 보여 드리겠습니다.
여러 단계에서 작동하는 여러git hooks이 있습니다. 우리는 규칙을 위해 두 개의 클라이언트 측 후크를 사용할 것입니다.
사전 커밋: 이 후크는 git-commit에 의해 호출되며
--no-verify
옵션으로 우회할 수 있습니다. 커밋하기 전에 브랜치 이름을 확인하기 위해 이 후크를 사용할 것입니다. commit-msg: 이 후크는 git-commit 및 git-merge에 의해 호출되며
--no-verify
옵션을 사용하여 우회할 수 있습니다. 제안된 커밋 메시지를 포함하는 파일의 이름인 단일 매개변수를 사용합니다. 커밋 메시지를 확인하기 위해 이 후크를 사용할 것입니다. 그리고 필요한 경우 커밋 메시지를 수정합니다. 후크 폴더 생성
홈 디렉토리로 이동하여
hooks
라는 폴더를 만듭니다. 그리고 후크 파일을 생성합니다.mkdir ~/hooks
cd ~/hooks
touch pre-commit
chmod +x pre-commit
touch commit-msg
chmod +x commit-msg
지점 이름 제한
브랜치 이름을 ISSUE-0000/feature-name으로 수락하지만
main
, develop
, release
등과 같은 다른 브랜치 이름도 고려해야 합니다. 이를 위해 다음 정규식을 사용할 수 있습니다.REGEX_ISSUE_ID="^(ISSUE-[0-9]+\/([a-zA-Z0-9]|-)+|develop|main|release"
브랜치 이름도 필요합니다.
git rev-parse --abbrev-ref HEAD
그게 다야! 우리는 정규식이 있고 브랜치 이름이 있습니다.
ISSUE-0000/feature-name
또는 develop
또는 main
또는 release
로 시작하는 지점 이름을 확인합니다. 확인이 실패하면 오류 메시지가 표시되고 exit code 1
와 함께 종료됩니다.pre-commit
#!/bin/bash
REGEX_ISSUE_ID="^(ISSUE-[0-9]+\/([a-zA-Z0-9]|-)+|develop|main|release"
ISSUE_ID_IN_BRANCH=$(echo $(git rev-parse --abbrev-ref HEAD) | grep -o -E "$REGEX_ISSUE_ID")
if [[ -z "$ISSUE_ID_IN_BRANCH" ]]; then
echo "[pre-commit-hook] Your branch name is illegal. Please rename your branch with using following regex: $REGEX_ISSUE_ID"
exit 1
fi
커밋 메시지 제한
단계는 분기 이름을 제한하는 것과 유사합니다. 그러나 커밋 메시지에 문제 ID가 없으면 브랜치 이름을 보고 거기에서 가져오려고 합니다. 문제 ID가 브랜치 이름에도 없으면 오류가 발생합니다.
REGEX_ISSUE_ID="^(ISSUE-[0-9]+|Merge|hotfix)"
첫 번째 인수
$1
는 commit-msg 파일을 제공합니다. 다음 명령으로 커밋 메시지를 읽을 수 있습니다.cat "$1"
우리는 regex를 가지고 있고 메시지 이름을 커밋해야 하고 마지막 단계에서 브랜치 이름을 얻는 방법을 알고 있습니다. 커밋 메시지가
ISSUE-0000
또는 Merge
또는 hotfix
로 시작하는지 확인합니다.커밋 확인이 실패하면 브랜치 이름을 확인하고 문제 ID를 구문 분석하고 커밋 메시지에 삽입합니다.
검사가 다시 실패하면 오류 메시지가 표시되고
exit code 1
와 함께 종료됩니다.commit-msg
#!/bin/bash
REGEX_ISSUE_ID="^(ISSUE-[0-9]+|Merge|hotfix)"
ISSUE_ID_IN_COMMIT=$(echo $(cat "$1") | grep -o -E "$REGEX_ISSUE_ID")
if [[ -z "$ISSUE_ID_IN_COMMIT" ]]; then
BRANCH_NAME=$(git symbolic-ref --short HEAD)
ISSUE_ID=$(echo "$BRANCH_NAME" | grep -o -E "$REGEX_ISSUE_ID")
if [[ -z "$ISSUE_ID" ]]; then
echo "[commit-msg-hook] Your commit message is illegal. Please rename your branch with using following regex: $REGEX_ISSUE_ID"
exit 1
fi
echo "$ISSUE_ID | $(cat "$1")" > "$1"
fi
용법
프로젝트 폴더로 이동하여 다음 명령을 실행하여 후크를 사용합니다. 후크를 사용하려는 모든 프로젝트에 대해 이것을 만들어야 합니다.
cd <your-team-repository>
git config core.hooksPath ~/hooks
팀원과 공유
~/hooks
폴더를 공유해야 합니다. git 저장소와 공유하거나 폴더를 팀에 직접 보낼 수 있습니다.
Reference
이 문제에 관하여(Git Hooks: 커밋 메시지 및 브랜치 이름 적용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ahmetcanaydemir/git-hooks-enforce-commit-message-and-branch-names-576d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)