Git hook으로 브랜치 이름 규칙 강제하기

2년 전에 작성했어야 할 글을 오늘에서야 작성하는 게으른 나 헤헷…

멋쩍은 웃음

현 회사에 합류하고 처음 담당한 프로젝트는 프론트엔드 경험이 거의(?) 없는 팀원 두 명을 리드하면서 Nuxt 기반의 프로덕트를 개발하는 프로젝트였다. (내가 입사 당시 UI 개발팀이었고 프론트엔드로 전환 중이었다.)

개발 환경을 설정하고 협업 간 여러 규칙을 설정해 가는 중에 git branch 네이밍에 대한 정책도 함께 설정했는데 역시 평소 사용하지 않던 규칙은 몸에 배어 있지 않기 때문에 놓치거나 오탈자가 발생하는 문제들이 종종 발견되었다.

도구로 해결할 수 있는 문제는 도구로 해결하자는 주의라 브랜치 네이밍 규칙을 강제할 수 있는 방법을 고민해 보기 시작했고, 몇 번의 리서칭 끝에 githook을 이용해서 강제성 부여가 가능함을 확인했다.

다만 너무 엄격한 강제성은 안 그래도 새로운 것들에 대한 부담이 있는 상태에서 계속 스트레스를 가중 시키는 일이 될 것 같아 어차피 협업 시 또는 GitLab CI에서만 정도로 문제가 될 수 있을 것으로 예상하여 push 시에만 규칙을 검증하고 실패 시 push를 막는 쪽으로 설정하기로 했다.

방법은 의외로 간단했는데 단지 shell script를 작성할 줄 알기만 하면 되고 정규식을 사용할 줄만 알면 되었다. (물론 몰라도 검색하면 나오고 요새는 chatGPT가 다 작성해주더라…)

current_branch="$(git rev-parse --abbrev-ref HEAD)"​​
valid_regex="^(feature|fixup|hotfix|refactor)\/[a-zA-Z0-9_-]+$"message="브랜치 이름이 규칙에 맞지 않아요."if [[ $current_branch= "develop" ]]then
  exit 0fi
if [[ ! $current_branch=~ $valid_regex ]]then
  printf "​$message"exit 1fi

이런식으로 말이다.

참고로 현재 브랜치를 가져오는 코드는 git branch --show-current로도 될거다.
git을 CLI로 사용한게 2014년부터였어서 rev-parse가 더 익숙해서 습관적으로 쓴 거라…

Hero image from pixabay

작성자

멀더끙

접근성에 관심이 많은 Front-End Developer, 커피 애호가, 사진 찍기 좋아하는 여행 러버, 아직도 블로그 뭘 쓸지 모르겠는 초보 블로거, 그냥 이것 저것 개인의 생각을 끄적끄적이는 멀더끙의 블로그입니다.

댓글