SVN는 Subversion이라고도 하며 소프트웨어 버전 관리 프로그램이다. SVN은 클라이언트 – 서버 시스템으로 이루어져 있다. 서버에는 repository라 불리는 장소에 문서나 소프트웨어의 코드들을 버전별(revision)로 가지고 있다. 클라이언트에서 문서를 수정한 후 서버에 올리는 작업(commit)을 거칠 때마다 새로운 revision이 생기며 이것이 최신 문서가 된다. 물론 서버에 올라와 있는 최신 문서를 가져오는 작업(update)과 특정 revision으로 되돌아가는 작업(revert)도 가능하다.
버전 관리 프로그램의 장점은 다수의 인원이 같은 프로젝트를 진행할 때 드러난다. 서버에 연결하여 다른 팀원이 수정하거나 추가한 최신 문서를 받기가 쉽고 이전 revision과 비교하여 어느 부분이 수정되었는지 찾는 작업도 용이하다. 서버에 branch라는 공간을 각 개인별로 추가하여 프로젝트 전체에 주는 영향을 최소화 하면서 새로운 부분을 개발할 수도 있으며 이를 검증하여 trunk라는 메인 공간에 합치는 작업도 쉽게 할 수 있다. 소프트웨어 개발 시에는 수정된 부분을 추적하여 코드의 의미를 파악하거나 문제점을 찾고 이전 코드로 복구하는 작업도 가능하다. 이슈 추적 시스템과 연동하면 버그를 찾고 수정하는 일을 훨씬 편하게 할 수 있다.
SVN 서버는 repository를 관리하기 위한 것으로 보통 오픈 프로젝트의 경우엔 웹, 회사 프로젝트엔 회사 내 서버 컴퓨터에 설치한다. 여기에서는 간단히 윈도우용 프로그램인 VisualSVN Server를 서버 컴퓨터(또는 로컬 컴퓨터)에 설치하는 방법을 알아본다.
VisualSVN의 클라이언트 버전은 Visual Studio의 Add-in 형태로 설치되어 Visual Studio에서 작업 후 쉽게 서버에 commit하거나 update할 수 있으나 유료 프로그램이다. 하지만 VisualSVN Server는 무료이므로 인터넷에서 다운 받아 바로 설치할 수 있다. 설치 과정은 다음과 같다.
VisualSVN의 설정은 다음과 같이 한다.
Client 프로그램 중 오픈 프로젝트에서 가장 많이 쓰이는 프로그램은 단연 Tortoise SVN이다. Tortoise SVN의 설치는 다음과 같이 한다.
생략
Tortoise SVN 설치 후에는 먼저 서버의 Repository와 클라이언트의 작업 디렉토리를 check out이라는 작업을 통해 동기화시켜야 한다. 다음과 같이 할 수 있다.
동기화를 마친 후 이 디렉토리는 working copy가 된다.
Tortoise SVN에는 수정사항을 비교(diff)하기 위한 diff viewer를 기본으로 내장하고 있으나 WinMerge라는 전용 diff viewer를 사용하면 더 깔끔한 디자인의 인터페이스에서 편리하게 diff 작업을 할 수 있다.
$ mkdir svn_console_test
$ svn import svn_console_test https://192.168.0.72/svn/study/trunk/svn_console_test -m "console import" $ svn import import_path svn://192.168.0.72/trunk/import_path --no-ignore ==> 폴더만 생성
$ rm -rf svn_console_test
$ svn co https://192.168.0.72/svn/study/trunk/svn_console_test ./svn_console_test
$ cd svn_console_test $ mkdir folder_add_test
$ svn add folder_add_test
$ svn commit folder_add_test -m "add new folder"
$ touch new_file
$ svn add ./*
$ svn commit ./* -m "add new file"
$ svn info
$ svn log $ svn log -l 10 -> 상위 10개의 로그만 보기
$ svn propset --revprop -r 리비전번호 svn:log "수정할 메시지"
$ svn resolver -R ./
$ svn cleanup
$ svn update $ svn update -r 100 -> revision 100 으로 업데이트
$ svn mkdir svn://192.168.0.72/trunk/new_dir
$ svn del [file_name] or [dir] $ svn del svn://192.168.0.72/trunk/test_project