[SVN] Hook Script로 SVN 제어하기
Hook이란?
특정 이벤트가 발생하면 동작하는 프로그램을 의미한다.
훅은 동작 방식에 따라 크게 2가지로 나눌 수 있으며, 그 종류는 다음과 같다.
- Pre-Hook : 이벤트가 처리되기 전에 수행됨
- 예) 정책에 맞는 메시지인지, 관리 규칙에 맞는지 등을 검사하고, 규칙에 어긋난다면 거부 등..
- Post-Hook : 이벤트가 완전히 처리된 후에 수행됨
- 예) 커밋된 내용을 업데이트하여 자동으로 빌드 수행 등..
SVN Hook
Svn에서 Hook을 설정하는 방법으로는 Server나 Client가 있는데, 해당 저장소를 사용하는 모든 유저에 적용하고 싶다면 Server에 거는 것이 일관성이 있으므로 더 좋다.
하지만 관리 이슈로 해당 서버에 접근할 수 없다면 실행 시 Client에서 스크립트 등록을 약속하고 개발환경을 구축할 수도 있겠다.
Server Hook 설정
1. 훅 설정 방법
훅 프로그램은 저장소의 hooks 디렉터리에 위치한다. 기본적으로 SVN 저장소를 생성하면 훅 스크립트 폴더가 생성되며, 그 아래 스크립트 템플릿이 같이 생성된다.
위처럼 hooks 폴더 내에 9개의 훅 스크립트 템플릿이 생성되며, 동작을 원할 시 템플릿을 참고하여 선호하는 언어의 스크립트를 같은 이름으로 생성해 폴더 안에 추가하면 동작한다. (이때 확장자는 스크립트에 맞게 바꿔주어야 한다.)
필자는 batch파일로 작업하였다.
2. post-lock.bat 샘플 코드
아래의 스크립트는 svn lock 이벤트가 처리된 이후 동작하며, lock건 파일의 저장소와 사용자, 파일명을 test.txt 폴더에 출력하는 스크립트다.
해당 이벤트는 파일 당 실행되므로 이어 쓰도록 처리하였으며 이를 이용해서 메일을 보내거나 이후 처리를 하면 된다.
@echo off
set REPOS=%1
set USER=%2
set /p LOCKPATH=
echo %REPOS% >> C:\Repositories\SVNTest\hooks\test.txt
echo %USER% >> C:\Repositories\SVNTest\hooks\test.txt
echo %LOCKPATH% >> C:\Repositories\SVNTest\hooks\test.txt
exit 0
Client Hook 설정
1. 훅 설정 방법
Client에서 hook을 하기 위해서 TortoiseSVN을 이용했다.
TortoiseSVN가 설치되어 있다면 로컬에서 내려받은 저장소 폴더에 가서 우클릭을 했을 때 아래와 같은 메뉴가 나오는데, 여기서 Settings을 선택한다.
그리고 Setting창에서 Hook Scripts를 등록하는 설정이 있는 것을 확인할 수 있으며 여기서 추가하면 된다.
HookType은 원하는 이벤트 시간에 맞게 설정하면 되며, Working Copy Path는 현재 작업 중인 SVN 저장소 디렉터리로 지정하고 Command Line To Execute는 실행시킬 hook script 실행 커맨드를 지정하면 된다.
그리고 하단에 Wait for the script~~, Hide the script~~는 모두 체크해 준다.
여기서도 batch파일로 작업하였으므로 전부 등록하면 이렇게 된다.
2. post-lock.bat 샘플 코드
클라이언트는 서버와 인자와 동작이 살짝 다르다. 따라서 이에 맞춰 작업해주어야 한다.
여기서 ITEM은 lock건 파일들을 의미하는데 이 파일들의 정보는 첫 번째 인자인 REPOS에 들어있다.
또한 메시지도 출력할 수 있는데 이 예제에서는 출력하진 않았으며, lock건 파일들을 test.txt 문서에 출력하는 예제이다.
@echo off
setlocal enabledelayedexpansion
set REPOS=%1
set LOCK=%2
set REPOS=%REPOS:"=%
set MESSAGE=%4
set MESSAGE=%MESSAGE:"=%
set MYPATH=%~dp0\test.txt
del %MYPATH%
for /f "delims=" %%i in (%REPOS%) do set ITEM=!ITEM! %%i
for /f "delims=" %%i in (%MESSAGE%) do set Desc=%%i
echo %ITEM% > %MYPATH%
exit 0
참고 사이트
https://svnbook.red-bean.com/en/1.7/svn.ref.reposhooks.html
https://www.visualsvn.com/support/topic/00188/
https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-settings.html
'Dev Tools > 형상관리' 카테고리의 다른 글
[VisualSVN Server] 설치 및 사용법 (0) | 2024.04.09 |
---|---|
[GitHub] 토큰 인증 로그인 + 자격 증명 (0) | 2021.08.26 |
[Git] TortoiseGit에서 ignore 파일 설정하기 (0) | 2021.06.07 |
댓글
이 글 공유하기
다른 글
-
[VisualSVN Server] 설치 및 사용법
[VisualSVN Server] 설치 및 사용법
2024.04.09 -
[GitHub] 토큰 인증 로그인 + 자격 증명
[GitHub] 토큰 인증 로그인 + 자격 증명
2021.08.26 -
[Git] TortoiseGit에서 ignore 파일 설정하기
[Git] TortoiseGit에서 ignore 파일 설정하기
2021.06.07