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 0
fi
if [[ ! $current_branch =~ $valid_regex ]]
then
printf "$message"
exit 1
fi
이런식으로 말이다.
참고로 현재 브랜치를 가져오는 코드는 git branch --show-current
로도 될거다.
git을 CLI로 사용한게 2014년부터였어서 rev-parse
가 더 익숙해서 습관적으로 쓴 거라…
Hero image from pixabay
댓글