Git Hooks를 적용해야 하는 팀
1. 팀 단위 프로젝트에서 작업자(개발자)마다 코드 스타일이 다르다.
2. Coding Conventions(코딩 컨벤션, 코딩 규칙)을 문서화 했지만, 모든 규칙을 한번에 외우기에도 어렵고, 사람의 습관은 쉽게 변하지 않는다.
나와 함께 일하는 동료와 한 팀으로 만나기 이전에 각자 다른 회사에서, 다른 프로젝트에서 자연스럽게 익힌 습관이 있고, 이 습관은 누구에게나 동일하게 적용될 수 없습니다.
따라서, 누구의 말이 옳고 그른지는 정해진 것이 없습니다.
이견이 조율되는 것은 좋은 그림일지라도 역시나 사람의 습관은 쉽게 변하지 않습니다.
공동의 이익을 위해 때로는 강제화 할 필요도 있다고 생각합니다.
pre-commit
훅은 커밋할 때 가장 먼저 호출되는 훅으로 커밋 메시지를 작성하기 전에 호출된다.
prepare-commit-msg
훅은 Git이 커밋 메시지를 생성하고 나서 편집기를 실행하기 전에 실행된다.
commit-msg
훅은 커밋 메시지가 들어 있는 임시 파일의 경로를 아규먼트로 받는다.
pre-rebase
훅은 Rebase 하기 전에 실행된다.
post-rewrite
훅은 커밋을 변경하는 명령을 실행했을 때 실행된다.
pre-commit
훅으로 팀의 코딩 컨벤션을 맞추기 위해 lint를 강제하려고 합니다.
lint에 통과하지 못하면 커밋할 수 없으니 프로젝트에 코드를 넣을 수 없도록 말입니다.
.git/hooks
위치로 이동합니다.
.sample
이라는 확장자가 붙은 파일이 여러개 있습니다.
pre-commit.sample
파일의 확장자만 지우면 바로 훅을 사용할 수 있지만, 말 그대로 샘플일 뿐이니 제가 바라는 lint는 실행되지 않을 것입니다.
pre-commit
새 파일을 만들고 lint 쉘 스크립트를 작성합니다.
준비 완료.
프로젝트의 파일을 수정하고 커밋하려고 한다면, lint가 선행됩니다.
lint 검사가 통과된 후 커밋이 정상적으로 될테고, 검사에 통과하지 못하면 커밋이 되지 않습니다.
하지만 한가지 아쉬운점이 있다면, 위에서 만든 pre-commit
파일은 로컬 설정이기 때문에, 프로젝트 내 작업자 모두 동일한 파일이 로컬에 있어야만 기대하는 효과를 볼 수 있습니다.
프로젝트 경로를 Git Hooks 경로로 만들 순 없을까?
있습니다.
프로젝트에서 새로운 폴더를 생성합니다.
저는 임의로 .githooks
폴더를 생성하겠습니다.
새로 생성한 폴더의 하위로 위에서 만든 pre-commit
파일을 이동하고 아래 명령어를 실행합니다.
git config core.hooksPath .githooks(새로 생성한 폴더 경로)
아래 명령어로 hooksPath가 새로 설정한 .githooks를 가르킨다면 성공입니다.
git config --get core.hooksPath
드디어 core.hooksPath 설정으로 모두가 동일한 pre-commit
을 사용할 수 있게 되었습니다.
이제 여러분은 PR에서 코드 스타일에 대한 리뷰 시간을 아낄 수 있을 것입니다.