훅 스크립트는 새로운 리비전 생성이나 버전 관리되지 않는 속성 수정과 같은 저장소 이벤트에 의해 트리거되는 프로그램입니다. 각 훅은 해당 이벤트가 무엇인지, 어떤 대상에서 작동하는지, 그리고 이벤트를 트리거한 사용자의 사용자 이름을 알 수 있는 충분한 정보를 받습니다. 훅의 출력 또는 반환 상태에 따라, 훅 프로그램은 작업을 계속하거나, 중지하거나, 어떤 방식으로든 일시 중단할 수 있습니다. 구현된 훅에 대한 자세한 내용은 Subversion Book의 훅 스크립트 장을 참조하십시오.
이러한 훅 스크립트는 저장소를 호스팅하는 서버에 의해 실행됩니다. TortoiseSVN은 특정 이벤트 발생 시 로컬에서 실행되는 클라이언트 측 훅 스크립트를 구성할 수도 있게 해줍니다. 더 자세한 정보는 “클라이언트 측 훅 스크립트” 섹션을 참조하십시오.
샘플 훅 스크립트는 저장소의 hooks 디렉터리에서 찾을 수 있습니다. 이 샘플 스크립트는 Unix/Linux 서버에 적합하지만, 서버가 Windows 기반인 경우 수정해야 합니다. 훅은 배치 파일 또는 실행 파일일 수 있습니다. 아래 샘플은 pre-revprop-change 훅을 구현하는 데 사용될 수 있는 배치 파일을 보여줍니다.
rem Only allow log messages to be changed.
if "%4" == "svn:log" exit 0
echo Property '%4' cannot be changed >&2
exit 1
표준 출력(stdout)으로 전송되는 모든 것은 버려진다는 점에 유의하십시오. 커밋 거부(Commit Reject) 대화 상자에 메시지를 표시하려면 표준 에러(stderr)로 보내야 합니다. 배치 파일에서는 >&2를 사용하여 이를 수행합니다.
훅 스크립트가 커밋을 거부하면 해당 결정은 최종적입니다. 하지만 매직 워드(Magic Word) 기법을 사용하여 스크립트 자체에 재정의 메커니즘을 구축할 수 있습니다. 스크립트가 작업을 거부하려는 경우, 먼저 로그 메시지에서 특별한 통과 문구(고정된 문구 또는 접두사가 붙은 파일 이름일 수도 있음)를 스캔합니다. 매직 워드를 찾으면 커밋을 진행하도록 허용합니다. 문구가 발견되지 않으면 “매직 워드를 말하지 않았습니다”와 같은 메시지와 함께 커밋을 차단할 수 있습니다. :-)