SVN SubVersion 설치 및 활용 (시리즈 강좌 - 05)

황제낙엽 2008.06.06 07:04 조회 수 : 242 추천:126

sitelink1 http://www.delmadang.com/community/bbs_v...amp;page=2 
sitelink2  
sitelink3  

개발환경 구축하기 - 12 : SVN 4

 
 흠 이번시간엔 원래 파일비교와 병합에 대해서 좀 다루어볼려고 했는데 사실 저 혼자만 잘(-.ㅡ?) 사용해서 커밋시 충돌이 일어난다거나 충돌시 파일들의 비교와 병합 그리고 패치등을 하는것에 익숙하지 않습니다. (사실 충돌이 일어나면 대충 비교해서 어거지로 땜빵 합니다. -.ㅠ)
 
 트랜잭션이라는 단어를 많이들 들어보셨을껍니다. 트랜잭션에 보면 lock 이라는게 있죠 잠금인데, svn 에서도 이런 처리가 있습니다. (얼마전에 첨 알았음 -.ㅡ;;;;) 체크아웃한 디렉토리나 특정 파일에 대해서 잠금처리를 해 놓으면 다른곳 또는 다른 사용자가 체크아웃해서 커밋할때 경고가 일어나며 커밋이 되질 않습니다. (꼬북이 메뉴 - 잠그기 / 잠금풀기)

 파일비교/병합 은 꼬북이 의 내장 프로그램을 사용하는것과 외부프로그램을 등록해 사용할수 있습니다. 이에 대한것은 다른 문서의 내용으로 땜빵 하겟습니다.

 일전에 소개해드린 사이트들중에서 >http://www.npteam.net/356 에서 TortoiseSVN_Beginner_Guide.zip 이 꼬북이를 사용하는 문서인데 보기쉽게 잘 정리되어 있습니다. 파일비교/병합 부분을 참고하세요.
 
 브랜치, 태그 로 전환하는것도 역시 위의 문서에 잘 설명이 되어 있습니다. 그러나 어디까지나 브랜치 나 태그 로 분기해서 사용하는것은 이용자가 알아서 적절히 사용하는것 뿐입니다. 반드시 그렇게 할 필요는 없습니다. 사실 전 브랜칭 하는것이 잘 모르겟습니다. 과연 꼭 해야 하는건지...쓰잘떼기 없는거 같기도 하고 -.ㅡ;; 뭐 여튼간에...전 브랜치 디렉토리를 하나의 프로젝트에서 갈라져 나오는 모듈등을 분기해놓고 사용하기는 합니다.
 
 눈여겨 보아야 할것은 tags 입니다. SubVersion 이 리비전으로 소스들의 버전을 관리해주기는 하지만 어디까지나 커밋단위로 리비전이 매겨지므로 우리가 어떤 프로젝트를 진행해 나갈때 일정한 법칙에 의해서 버전을 매길 필요가 있습니다. (뭐 버전을 다는것은 개발자마다 다 틀리지만 보통 Ver 1.0 을 위해서 처음엔 노력하죠? 최초에 0.1 부터 시작해서 어느정도 기능상이나 기타 로드맵에 의해서 버전을 분기시킵니다.)
 
 자 우리가 저장소에 등록했던 얄딱꾸리한 프로그램 비록 indy 콤포넌트를 사용함으로 해서 실제 코드는 몇줄 안돼지만은 타임서버에서 시간을 가져와 동기화 시키는건 다 됐죠. 이넘은 ver 0.1 로 태깅(적절한 용어인지..-.ㅡ) 하도록 합시다.
 
 참고로 tags 로 분기한다고 해서 파일들이 실제로 복사가 되는것은 아닙니다. 링크만 걸리고 실제 파일들은 여전히 trunk 에 있습니다.
 
 체크아웃한 폴더에서 꼬북이 메뉴에서 브랜치/태그 를 선택합니다.
 
svn-tags.jpg

 

 
위와 같은 화면이 나오는데요. 대상 url 에서 svn://localhost/delmadang/tags/v0.1 로 정합니다. v0.1 같은건 맘에 드시는걸루 정해주시면 돼겟습니다. 분기할 원본선택은 기본값으로는 저장소의 최신 리비전이고요 그외 특정 리비전이나 현재 작업 디렉토리에 있는것으로 골라 할수도 있습니다.
 
로그작성후 확인을 누르시면 태깅이 됩니다. 분명 경고 메세지가 하나 뜰텐데요 그것은 지금 태깅을 했지만은 작업디렉토리에 있는것은 trunk 를 가리키고 있다는것입니다. 무시해도 되는데 이것은 분기된 tags/v0.1 을 가지고 작업을 하겟는가 아니면 trunk 를 가지고 작업하겟는가 입니다. (흠 헷갈리나요? )
 
여튼간에 꼬북이 메뉴-브랜치/태그 전환 하기로 대상 url 를 바꿀수는 있지만 tags 로 한번 분기된것은 리뷰는 할수 있어도 그 내용을 수정하는것은 바람직하지 않다고 봅니다.
 
이것으로 꼬북이를 사용해서 저장소를 사용하는 방법은 대충 다 다룬듯 합니다. 물론 이외에도 엄청나게 많은 기능들과 옵션들이 많지만 기본적으로 사용하는데 있어서는 무리 없을것 같습니다. 나머지는 도움말이나 다른 잘 정리된 문서들을 참고 하시길 바랍니다.
 
마지막으로 저장소의 백업에 관한것을 다루고 SVN 은 마치도록 하겟습니다.
 
백업은 방법이야 어떻든 간에 일관된 정책을 가지고 주기적으로 하는것이 제일 왔담돠...비록 SubVersion 의 저장소를 이용해서 우리들이 직접 소스를 백업하지 않아되는 점이 있긴하지만 저장소도 파일로 저장되는것이기때문에 이넘을 또 백업해야 한다는점이...
 
아쉽게도 우리들의 사랑스런 꼬북이넘은 백업기능이 없나봅니다. 찾아봐도 안보이는군요. 와이군님의 메니지먼트 프로그램에는 해당 프로젝트별로 등록해서 백업/복구 한느 기능이 있으니 참고 하시길 바라며. 여기서는 svnadmin.exe 를 가지고 저장소를 관리하는것을 다루어보도록 하겟습니다.
 
svnadmin 은 저장소를 생성하고 검증하고, 백업하고 복구하고 기타등등등 저장소를 관리하는 유틸리티 입니다. 여러가지 하위 명령어중 몇가지만 다루도록 하겟습니다. (참고로 이 유틸리티 역시 커맨드 라인 유틸리티고 기본적으로 출려과 아웃을 표준출력 즉 stdin, stdout 을 지원하기 때문에 리다이렉션 과 파이프 등을 활용할 필요가 있습니다.)
 
앞으로 설명한것중에 저장소경로는 실제 경로 입니다. svn:// 이나 file:/// 이 아닌 d:work.. 처럼 경로를 말합니다.
 
저장소 검사
 
저장소에 오류가 있는지 확인하는 명령어는 verify 입니다.
 
 svnadmin verify d:worksvnreposdelmadang

하면 최신리비전까지 검사를 합니다. 오류가 있다면 오류 메세지를 뿌려줄것이고요 그렇지 않다면 걍 검토된 리비전 xx 라는 메세지만 나올것입니다. (관례인지 몰라도 많은 수많은 유틸리티들이 *nix 의 정신을 이어받아 성공하면 아무런 메세지가 안나온담니다. -.ㅡ;;;)

저장소 복구

저장소에 오류가 있을경우 복구를 시도합니다.

 svnadmin recover d:worksvnreposdelmadang

역시 별다른 오류가 없을때는 걍 간단한 진행에 대한 메세지만 뿌려줄것입니다. 이 작업은 저장소에 대해서 잠금을 해야 하기때문에 만약 다른 프로세서에 의해 사용중이라면 바로 빠져나올것입니다. --wait 옵션을 주어 대기할수 있습니다.

저장소 복사

저장소의 내용을 다른 저장소로 복사 합니다.

 svnadmin hotcopy d:worksvnreposdelmadang dworksvnrepos-backupdelmadang

앞에경로가 원본 경로고 뒤에께 타겟경로 입니다. 타겟저장소가 생성되어 있지 않다면 원본과 동일한 파일시스템을 생성하여 복사합니다. 사용자구성파일등 기타 파일도 고대로 복사됩니다.

저장소 덤프

저장소의 내용을 stdout 으로 덤프합니다.

 svnadmin dump d:worksvnreposdelmadang

화면에 쭈루루룩 표시가 됩니다. 리다이렉션으로 파일로 저장할 필요가 있습니다.

 svnadmin dump d:worksvnreposdelmadang > svn.delmadang.dump

또한 -r 이나 --revision 으로 특정리비전 또는 일정 범위를 주어서 해당 리비전만 덤프를 할수 있습니다.

 svnadmin dump d:worksvnreposdelmadang -r 20 > svn.delmadang.dump
 svnadmin dump d:worksvnreposdelmadang -r 20:24 > svn.delmadang.dump
 svnadmin dump d:worksvnreposdelmadang -r 20:HEAD > svn.delmadang.dump

 각각 리비전 20번만, 20번부터 24번까지, 20번부터 최신리비전까지 리비전으로 범위를 주어 덤프 하는 예제 입니다.

저장소 로드

stdin 으로 덤프파일을 읽어들여 저장소에 적재 시킵니다.

 svnadmin load d:worksvnreposdelmadang < svn.delmadang.dump

역시 표준입,출력으로 입력받고 출력을 하므로 진행결과를 파일로 저장할때도 리다이렉션으로 파일로 저장할수 있습니다.

 svnadmin load d:worksvnreposdelmadang < svn.delmadang.dump > load.delmadang.log

기본적으로 SubVersion 은 덤프파일로 백업 시스템을 갖추고 있습니다만 해당 저장소의 디렉토리 통채로 압축해서 백업할수도 있습니다. 하지만 덤프를 받는것이 좀 귀찮긴 하지만 여러가지 옵션들을 이용해서 적절히 가공해서 백업을 받을수 있으니 잘 숙지하셔서 저장소를 잃어버리는 몹쓸 사태에 대비 하세요...

적절히 배치파일을 만들어서 스케줄러에 등록하면 되겟죠 ^^ 이도저도 귀찮으면 와이군님꺼루 걍~~~ 쓱싹...

그럼 일단 SubVersion 은 이쯤에서 마치도록 하겟습니다.