git 도 다른 형상 관리 시스템처럼 이벤트가 발생했을 때  훅(hook)을 통해 특정 기능을 실행할 수 있는 기능이 있으며 git 모델이 분산형이므로 훅의 종류가 굉장히 다양하게 존재한다. 

 

훅이 위치하는 장소에 따라 클라이언트 훅과 서버 훅으로 나눠어져 있으며  클라이언트 훅은 서브버전처럼 git 로컬 저장소내 .git/hooks/  디렉터리에 지정할 수 있다.

훅의 용도는 "커밋 로그 메시지가 이슈 번호를 포함해야 한다"  등의 버전 관리 정책을 강제하는 용도로 많이 쓰이므로 중앙에서 제어할 수 없는 클라이언트 훅은 그리 유용하지가 않다.

 

서버 훅은 모두 push 전후에 실행되며 크게 push 전에 실행되는 pre-receive 훅과 push 가 완료된 후에 실행되는 post-receive 훅으로 나뉘어져 있다.


git 저장소에 훅을 설정하고 테스트 하는 것은 까다로운 작업이지만 gitlab 은 웹기반의 관리 UI 에서 프로젝트마다 간편하게 훅을 설정할 수 있다.

한가지 단점은 웹 훅은 post-receive 만 설정할 수 있으므로 push 가 끝났을  때만 완료시에만 사용 가능하므로 push 후 CI 연계나 이메일 전송등 이벤트 알림으로 용도가 제한된다.

커밋 메시지 검사하여 push 거부등의 정책 강제화를 gitlab 에서 사용하려면 Enterprise Version 을 사용해야 한다. (http://doc.gitlab.com/ee/git_hooks/git_hooks.html)