자주 쓰이는 Git 훅들
참고: git 훅에 대한 공식 문서가 존재합니다.
소스코드 관리 도구인 git
은 여러가지 훅을 지원합니다. 훅을 설정하면 커밋, 푸시 등의 이벤트가 발생했을 때 특정 스크립트를 실행할 수 있습니다. 클라이언트 훅도 존재하고 서버 훅도 존재하지만, GitHub 같은 호스팅 서비스들이 대부분 서버 사이드 훅을 지원하지 않기 때문에 클라이언트 사이드 훅이 주로 쓰입니다.
주의해야할 점은 보안을 위해 레포지토리를 클론해도 git 훅이 자동으로 설정되지 않는다는 점입니다. 그래서 훅을 설치하는 스크립트를 만들어서 그걸 실행해거나, husky 같은 git 훅 관리 도구를 사용해 훅을 설정해야 합니다.
훅의 종류
이 글에서는 흔히 쓰이는 세가지 클라이언트 사이드 훅만 다릅니다. 나머지 훅에 대해서는 페이지 상단에 링크된 공식 문서를 참조하세요.
pre-commit
pre-commit
훅은 커밋하기 전에 실행됩니다. 커밋 메시지를 작성하기 전에 호출되며, 이 스크립트가 0이 아닌 값을 반환하면 커밋이 취소됩니다. 이 훅은 린터를 돌리는 등 검증을 위해 사용됩니다. 그리고 git commit --no-verify
로 이 훅을 생략할 수 있습니다.
commit-msg
commit-msg
훅은 커밋 메시지를 작성한 후 커밋되기 직전에 실행됩니다. pre-commit
훅과 마찬가지로 이 스크립트가 0이 아닌 값을 반환하면 커밋이 취소됩니다. 이 훅은 커밋 메시지 등을 점검할 때 쓰입니다.
프로젝트의 일관성, 혹은 ChangeLog 자동 생성을 위해 커밋 메시지 포맷을 일정하게 유지하는 경우가 있는데, 이런 경우에 유용한 훅입니다.
feat(fe/feat1): Show proper error message
예를 들어 모든 커밋 메시지가 위와 같은 제목을 가지고 있다면, 자동으로 어떤 파트가 어떻게 바뀌었는지에 대한 ChangeLog를 생성할 수 있습니다.
pre-push
pre-push
훅은 푸시하기 전에 실행됩니다. 위의 훅드로가 마찬가지로 이 스크립트가 0이 아닌 값을 반환하면 푸시가 취소됩니다. 이 훅을 이용하면 푸시하기 전에 테스트를 돌리거나, 린터를 돌리는 등의 작업을 할 수 있습니다. 커밋 훅과 역할이 겹치는데, commit
을 push
보다 자주하기 때문에 두가지 훅을 같이 사용하는 경우 일반적으로 무거운 작업을 push
훅에서 돌립니다.