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

황제낙엽 2008.06.06 07:03 조회 수 : 258 추천:111

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

개발환경 구축하기 11 : SVN 3

 
 흠 델마당 사이트가 제 컴퓨터에선 정상적으로 보이지가 않군요. -.ㅡ;; 아래 글 SVN 1 , SVN 2 글 잘 보이나요? 노트북으로 접속해서 봤는데 글자크기가 쬐끄많게 보이던데...제컴터에선 큼지막하게 보이던데...

다소 진행이 산만하게 되는듯 하네요 원래 이게 아닌데..ㅎㅎ

이번에는 꼬북이 클라이언트로 저장소에 접근해서 파일과 로그를 살펴보고, 업데이트 와 커밋등 여러가지 작업을 한번 해보도록 하겟습니다. TortoiseSVN (전 꼬북이 라고 부른답니다. -.ㅡ) 은 다 설치하셨죠? 한글언어팩도 있으니 설치하시고 언어를 한글로 설정을 해주세요. 뭐 영어가 좋다면야 어쩔수 없지만서도... 
 
꼬북이는 쉘 익스텐션 으로 탐색기 에서 콘텍스트 메뉴를 통해서 사용할수 있습니다. 탐새끼를 잘 안쓰는 저에겐 이점이 좀 불만스럽지만 의외로 탐새끼를 많이들 사용하시니깐...콘텍스트 메뉴는 다 아시다시피 어디서 메뉴를 호출했는가에 따라서 보이는 메뉴가 다르죠?  기본적으로 콘텍스트 메뉴를 호출하면 TortoiseSVN 메뉴는 보이실껍니다. 요게 메인메뉴고요 하위로 여러가지 작업을 할수 있는 메뉴가 존재 합니다. 그밖에 어디서 호출했는가에 따라서 체크아웃이나 업데이트, 커밋이 보이실껍니다.
 
일단 저장소 부라자를 이용해서 저장소를 한번 들여다 볼까요.
 
바탕화면이나 탐새끼에서 메뉴를 호출해서 TortoiseSVN - 저장소 브라자 를 선택합니다. 그러면 입력창 이 하나 뜨는데요 요기에 svn://localhost/delmadang/trunk 라고 입력합니다. (물론 이전까지는 설명을 위해서 /delmadang 로 접속을 했었는데 굳이 저장소 루트에 접속하실 필요는 없습니다. trunk 디렉토리가 쓰임새는 설명해 드렸으니 기본적으로 trunk 디렉토리에 접속하시면 되겟습니다.) 

repos-browser(1).jpg

 



위와 같은 창이 뜨겟죠. 트리로 저장소에 있는 디렉토리와 파일들이 출력되고 해당 파일에 대한 리비전 번호와 작성자등 기타 정보가 출력됩니다.

상단의 URL 창을 통해서 직접이동할수도 있고 우측상단에 있는 HEAD 버튼을 통해서 원하는 리비전 번호를 선택해 필터링을 할수 있습니다.

해당 디렉토리나 파일을 선택한후 팝업메뉴를 띄우면 할수 있는 작업의 메뉴들이 나옵니다. 저장소 브라자를 통해서 원하는 파일들만 골라서 체크 아웃 할수도 있고 파일을 추가할수도 있습니다. 또한 삭제나 이름변경 등도 다 할수 있어요.. 메뉴보면 다 아시겟지만서도 ^^;; 주의 하실점은 저장소에 있는 원본이라는거 잊지 마시고 작업을 하시면 되겟습니다.

로그를 볼까요 trunk 디렉토리를 선택하신후에 오른쪽 버튼 클릭으로 메뉴를 띄워 보세요 로그보기 를 선택하시면 해당 디렉토리에 대한 커밋 로그들을 확인할수가 있습니다. 먼저 커밋로그의 간단한 내용들이 목록으로 보여지구요 중간에는 해당 로그를 선택하면 로그내용이 나오고 밑에는 추가되거나 변경된 파일 목록들이 출력됩니다.

svn 커맨드 라인 클라이언트로는 svn log svn://localhost/delmadang/trunk [-q] [-v] 로 같은 결과를 확인할수 있습니다.

거듭말하지만 로그를 작성하지 않고 버전 콘트롤 시스템을 사용한다는것은 단순히 백업용도로 밖에 사용하지 않는것입니다. 또한 공동으로 작업을 할때는 더더욱 중요하죠. 해당 리비전에 어떤점이 달라졌는가 기록하는것이 나중에 추적할때 편리합니다.

상단의 날자를 지정하거나 작성자,로그내용 등의 일부 문자로 원하는 로그들만 추려서 볼수도 있습니다. 각종 통계도 수치나 그래프로 도 확인할수 있고요...

자 그런데 저장소에 보니 지난번에 우리가 모든 파일을 저장소에 밀어넣었기 때문에 사실 버전 콘트롤이 필요없는것들이 포함되어 있습니다. /build 디렉토리에 생성된 실행파일이라든가 /build/dcu 디렉토리에 생성된 dcu 파일들 그리고 /source 디렉토리에 유닛과 폼등의 파일의 편집백업 파일들 사실 이런애들은 저장소에 넣으면 안돼는 파일들입니다. 실행파일이야 머 그냥 냅둘수 있다 치더라도 특히 dcu 파일같은경우는 여러명이서 작업하거나 여러군데서 작업후 커밋, 업데이트시 충돌이 일어날 확률이 높습니다. 필요없는 파일이기도 하고요.

그럼 저장소에서 삭제를 해봅시다. 해당 파일을 선택하신후 메뉴를 띄워서 삭제를 선택합니다. 로그 메세지 작성하시면 저장소에서 삭제가 됩니다.

자 그럼 어제 체크아웃한 디렉토리에 가서 메뉴를 띄워서 업데이트 (svn update)를 해봅니다. 지난번 체크아웃이후에 변경된 것이 있으면 저장소에서 받아서 업데이트를 해줍니다. 파일 몇개를 지웠으니 삭제되었다는 메세지가 나옵니다. 물론 해당 로그를 확인해볼수 있습니다. 해당 디렉토리에 가보면 실제로 파일들이 사라진것을 볼수 있습니다.

(꼬북이를 설치함으로 인해서 탐새끼에서 해당 디렉토리나 파일을 선택한후 등록정보(속성 - Alt-Enter) 에 SubVersion 이라는 탭이 하나 생깁니다. 이탭은 해당 디렉토리나 파일의 정보를 확인할수 있으며 로그도 볼수 있습니다.)

자 그럼 소스를 조금 변경해 봅시다. 어떻게 변경해볼까요? 저는 다음과 같이 변경해봤습니다. TMemo 하나 올려놓고..

 Memo1.Lines.Add('시간 : '+ FormatDateTime('YYYY-MM-DD hh:nn:ss',Now));
 IdSNTP1.Host:= 'kr.pool.ntp.org';
  IdSNTP1.Port:= 123;
  IdSNTP1.Active:= True;
  If Not IdSNTP1.SyncTime Then
  Memo1.Lines.Add('시간 동기 실패');
 Memo1.Lines.Add('시간 : '+ FormatDateTime('YYYY-MM-DD hh:nn:ss',Now));
  IdSNTP1.Active:= False;


저장하고 컴파일하고 실행해서 잘되나 확인하고요....잘 됐나요? 흠 이번 수정하고 컴파일 했으니 소스디렉토리나 build 디렉토리에 파일들이 생성돼었겟죠? 지난번에도 말씀 드렸다시피 이넘들은 버전 관리 대상들이 아닙니다. 따라서 일일이 추가를 해줘야 하는데...꼬북이는 커밋할때 버전 관리 대상이 아닌애들도 조사해서 목록에 올려놓고 체크박스를 이용해서 추가를 할지 않할지 결정을 할수 있습니다.

그런데 소스디렉토리에 생겨난 ~으로 시작하는 백업 파일들이나 실행파일과 dcu 파일들은 저장소에 넣지 말기로 했죠? 커밋할때 매번 꼬북이가 추가할껀지 안할건지 결정하라고 보여주는데 걍 맨날 일일이 확인해서 결정할수도 없고...지금이야 파일이 몇개 없으니 괜찮지만 나중에 클래스 유닛이라든가 다른 유닛들을 추가하면 글마들도 같이 올라오니...정신없습니다.

그래서 사용되는것이 속성값을 사용하는것입니다. 속성이란 서브버전에서 디렉토리나 파일을 관리할때 사용되는것으로 이름:값 형태로 지정해서 사용할수 있습니다. 속성편집은 탐색기에서 해당 파일이나 디렉토리를 선택해 TortoiseSVN - 속성 을 선택하거나 Alt-Enter 로 SubVersion 탭에서 속성을 선택해서 확인하거나 추가,변경등을 할수 있습니다.

여러가지 속성을 지정할수 있는데 일단 버전관리 대상에서 제외 시키는것을 만들어보죠. 일단 파일 하나 하나를 선택해서 할수도 있고 해당 디렉토리나 최상위 디렉토리에서 설정해 하위디렉토리까지 포함 할수도 있습니다.
 
일단 하나씩 하는 방법은...새로 생성된 파일은 Alt-Enter 에 SubVersion 탭이 보이질 않으니 오른쪽 버튼을 이용해 메뉴를 띄워서 꼬북이SVN 에 보면 추가 와 무시목록 에 추가 라는게 있습니다. 말 그대로 해당 파일을 버전 관리대상에 포함 시키냐 와 아니면 제외할 대상에 추가를 할것인가를 묻는데 무시목록 추가에 보면 해당 파일만 선택할수 있고 아니면 와일드문자를 이용해서 비슷한 파일 모두를 선택할수가 있습니다. (무시목록에서 제거할때도 같은 방식으로 하시면 됩니다.)

추가하셨나요? 요런식으로 하나 하나 파일을 선택해서 추가/제거를 하셔도 되고요 아니면 디렉토리를 선택해서 속성을 띄우면 속성편집기를 이용해서 하실수도 있습니다. 추가를 선택해서 svn:ignore 를 선택해서 파일명이나 와일드문자등을 이용해서 추가하시면 되겟습니다.

위에서 개별적으로 등록한 속성이 보이시죠? 전 Unit1.~dfm 파일을 무시목록에 추가했더니 속성 편집기에 다음과 같이 나오는군요.

svn:ignore   *.~dfm

델파이에서 편집백업 파일은 확장자가 모두 ~ 로 시작하지요? 바꿔 봅시다. 목록에서 선택을 하면 삭제나 편집 버튼이 활성화가 됩니다. 편집을 선택해서 속성값을 *.~* 으로 바꿔구 확인하시면 변경이 됩니다. 여기서 하위 폴더에도 같은 속성을 적용할려면 '하위 폴더에도~~' 를 선택하시면 되겟습니다. (와일드문자는 도스나 Linux 계열을 다루어보신분은 아시겟지만 모든문자를 매칭하는 * 과 하나의문자를 매칭하는 ? 를 사용할수 있으며 [ ] 를 사용해서 범위를 지정할수 있습니다. 예를 들면 [a-z] 라하면 a 부터 z 까지...)

build 디렉토리에서 exe 파일과 dcu 같은 파일도 무시목록에 추가해보도록 하세요. 여러파일을 따로따로 무시 목록에 추가할때는 속성값에서 같이 등록해주시면 되겟습니다.

예:

*.exe
*.dcu

자 그럼 이제 ProjectA 디렉토리를 선택해서 커밋을 한번 해봅시다. 사실 build 나 doc 디렉토리는 변경된 사항이 없기때문에 그냥 source 디렉토리만 커밋하면 되긴합니다. 커밋할 파일 목록에 무시목록에서 지정했던 파일들은 올라오지 않지요? 커밋해도 이제 해당 파일들은 제외 됩니다. 저장소에 저장두 안돼고요..

어떤 공개소스를 보다보면 파일 맨위에 주석문들이 주렁주렁 달려있는데 다음과 같은 내용들을 볼수가 있습니다.

 # --------------------------------------------------------
 # $Id: index.php,v 1.16.2.1 2007/10/13 22:33:15 giallu Exp $
 # --------------------------------------------------------

흠 웬지 뽀다구 납니다. -.ㅡ 우리도 한번 해봅시다. Unit1.pas 파일을 선택해 속성 편집기로 들어가  svn:keyword 를 선택하고 다음과 같은 키워드를 등록합니다.

Date
Revision
Author
HeadURL
Id

등록하고 Unit1.pas 파일의 젤위다...

// $Date$
// $Revision
// $Author
// $HeadURL
// $Id

라고 추가합니다. 이제 커밋하고 업데이트 하면 Unit1.pas 의 내용이 바뀝니다. 각각 날자 와 리비전번호, 작성자, url 그리고 해당 파일의 간략한 정보로......(그런데 한글은 깨지는군요....줵슨~)

키워드 Date 는 LastChangedDate 로 Revision 은 LastChangedRevision 이나 Rev 로 Author 은 LastChangedBy 로 사용할수 있습니다.
 
물론 해당 파일에 $로 감싸서 똑같이 써놔야 겟죠..
 
그럼 요기까지....