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

황제낙엽 2008.06.06 07:00 조회 수 : 479 추천:113

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

개발환경 구축하기 - 10 : SVN 2

 
 svn:// 프로토콜로 저장소에 접근 하기 위해서 계정을 생성해 인증을 받을 필요가 있습니다. 물론 익명으로 접근해서 작업을 할수는 있지만 공동으로 작업할때는 누가 뭘 했는지 알아야 하니 계정을 활당해 줄 필요가 있겟죠.
 
 SubVersion 은 설정파일을 가지고 인증처리를 하고 있습니다. 설정파일은 저장소 디렉토리에 /conf 에 들어 있습니다. 기본적으로 다음과 같은 파일들이 있습니다.
 
 svnserve.conf
 authz
 password
 
 두가지의 인증 처리 가 있는데 하나는 사용자계정만으로 설정을 하는것이 있고 또 하나는 경로 기반으로 할수가 있는데 아무리 해봐도 경로 기반으로는 안돼는군요 -.ㅠ
 
우선 svnserve.conf 파일을 열어보면 장황한 주석이 있습니다. general 섹션에 그중에서 다음과 같은 부분이 있습니다.

# anon-access = read
# auth-access = write
# password-db = passwd

# authz-db = authz

# realm = My First Repository

이 주석을 풀거나 밑에 따로 설정을 해주면 해당 옵션들이 작용을 합니다.

anon-access  항목은 익명사용자 의 접근을 허락하겟는가 와 어떤 권한을 줄것인가를 지정합니다. none, read, write 중 하나를 선택합니다. none 는 접근을 불허하고 read 는 읽기만 write 는 쓰기도 가능합니다.

auth-access 항목은 인증된(등록된) 사용자에 대한것입니다.
password-db 항목은 사용자데이터 파일을 지정하는것입니다. 다른 디렉토리에 있을겨우 풀 경로를 지정해주시면되겟습니다.
 
authz-db 항목은 경로 기반 인증 파일을 지정하는것입니다. 역시 다른 디렉토리에 있을경우 풀 경로를 지정해주시고요 원래 이놈을 사용하면 사용자들을 그룹별로 묶거나 해당 사용자들을 읽기와 쓰기 권한을 세부적으로 지정해줄수 있는거 같은데 도통 설정이 안되는군요. 그간 혼자서 써와서 신경을 안썼었는데 좀더 연구 해봐야겟습니다.
 
realm 항목은 저장소에 접근할때 사용자계정을 입력할때 보이는 영역 이름입니다. 원하는것을 써주시면 되겟습니다. 흠 svn 은 utf-8 을 사용합니다. 따라서 한글로 표기하길 원하신다면 svnserve.conf 파일을 utf-8 로 저장을...
 
자 그럼 한번 설정을 해볼까요..
 
anon-access = none
auth-access = write
 
password-db = password
 
realm = svn.delmdang
 
이렇게만 해봅시다. (authz-db 는 풀지 마시고요. 나중에 설정방법을 알게되면...그때나..혹 아시는 분 계심 설명좀..)
 
password 파일은 사용자 계정 정보가 담긴 파일입니다. user 섹션에 사용자 아이디=비밀번호 형식으로 등록하시면 되겟습니다. 역시 한글사용자명을 처리할려면 utf-8 로 저장하시면 되겟습니다. (svn 클라이언트를 사용할때는 당연 사용을 못합니다만 (svn 클라이언트 단이 아고 도스창에서 ime가 입력을 못하는거겟죠) 꼬북이 클라이언트나 기타 입력시 utf-8 인코딩을 지원하는 툴에선 가능하지요..)
 
authz 파일은...사용자를 그룹으로 묶어서 세부권한을 준다거나 경로기반으로 사용자들의 권한을 설정할수 있답니다만...흠냥...
 
자 그럼 사용자도 등록했으니 한번...접근을 해볼까요? (참 svn 클라이언트는 사용자 아이디를 기본으로 원도우의 현재 로그인 한 계정을 사용합니다.  svn 으로 접근할때 원도 로그인 사용자 암호부터 물어댑니다. 귀찮..-.ㅡ;; 꼬북이 클라이언트는 입력받는 화면이 따로 준비되어 있어요..그러니 로그인 사용자명으로 등록하면 쬐끔 편하실껍니다.)
 
c:>svn ls svn://localhost/delmdang
 
해보셔요...아이디와 암호를 입력하라구 궁시렁 댑니다.

svn 클라이언트는 기본적으로 인증받은것을 저장합니다. 그래서 인증에 한번 성공하면 저장된값을 가지고 인증절차를 거칩니다. 만약 인증에 실패하거나 매번 인증을 하고 싶다면은... --no-auth--cache 옵션을 사용하시면 되겟습니다. 참고로 캐쉬는 %APPDATA%Subversionauth 디렉토리에 저장됩니다. /svn.simple 디렉토리에 생성된 파일을 삭제하면 다시 아이디와 암호를 입력하라구 합니다. (%APPDATA% 디렉토리는...오디게용? ^^;;)

자 사용자도 등록해놨고...이제 이 저장소에 파일을 집어넣고 빼고...해보도록 하겟습니다. 흠 귀찮으신 분은 걍 기존에 있는 파일을 넣으시구요...일단 델파이에서 새프로젝트 하나 만들어봅시다..

걍 빈폼 딸랑 하나 있는거 암데나 저장하시고요...다른분들은 어떻게 하시는지 모르겟지만 프로젝트 마다 이런 구조는 어떨까 합니다.

-ProjectA
 -source
  -module1
  -module2
 -build
  -dcu
 -doc

흠..뭐 개인적으로 저런구조를 가지고 소스를 정리합니다. source 는 소스의 메인디렉토리구요..필요에 따라서 따로 관리할 필요가 있는 파일들은 하위 디렉토리에 저장합니다. build 는 컴파일시 생성되는 실행파일이 생성되는 디렉토리 그리고 dcu 는 dcu 가 생성되는 디렉토리 입니다. doc 는 해당 프로젝트에 필요한 문서 파일같은거 넣는데구요....뭐 걍 개인적으로 사용하는 디렉토리 구조입니다. 프로젝트 옵션에서 이것저것 설정하는게 좀 귀찮기는 하지만... 그래도 관리에 좀더 효율적인거 같더군요..(글쿠 웬지 뽀다구도 납니다. -.ㅡ;;;)

ProjectA 라고 해서 c:workProjectA 디렉토리에 저장했습니다. 저장소에 넣어볼까요...모든작업은 일단 처음에 저장소에 넣는것 부터 시작됩니다.

c:> svn import c:workProjectA svn://localhost/delmadang/trunk

커밋 로그를 작성하라고 에디터가 쓩 뜹니다. 뭐 대충 알아서 적으시고 저장하고 종료합니다.


추가      c:workProjectAbuild
....

위와 같이 파일과 디렉토리가 추가되었다고 메세지가 나오면서 리비전 번호가 뜹니다. 축하드립니다. 첫번째로 저장소에 파일을 집어넣었습니다. 흠 파일들이 제대로 들어갔는가 확인해볼까요?

(아 델마당 게시판에서 쓰는 웹에디터...이상해요...-.ㅡ;; 컬러두 줄바꾸면 도로 바뀌네여..)

c: svn ls -R svn://localhost/delmadang/trunk

디렉토리와 파일들의 목록이 보이시죠? 후훗 인자 저장소에 집어넣었으니깐 저장햇던거...모조리 삭제 해버립니다. 인자 필요없삼 -.ㅡ;;;; 그리고 이제 저장소에서 꺼내봅시다. 체크아웃~ (svn 을 사용하는 순간 저장소에 있는것들 만이 원본이 되고 꺼내온것...즉 워킹 디렉토리에 있는것들은 다 사본이 되는것입니다. 작업 사본 이라고 합니다.)

물론 워킹 디렉토리로 사용할 디렉토리는 생성해놔야겟죠?

c:> svn checkout svn://localhost/delmdang/trunk -r head c:workProjectA 

A      c:workProjectAbuild
....

체크아웃하는 파일목록이 보이고 마지막에 체크아웃한 리비전 번호가 뜹니다. 참고로 -r head 옵션은 생략가능하며 -r 옵션으로 특정 리비전에 해당하는 파일들을 가져올수 있습니다. head 는 마지막 커밋된 리비전을 뜻합니다.

워킹 디렉토리 에 가보시면 .svn 이라는 디렉토리가 추가로 생성되어 있습니다. 탐색기 등에서 보면 디렉토리나 파일의 아이콘에 이상한 아이콘들이 오버레이 되어서 보이는데요 이 오버레이된 아이콘은 체크아웃해서 변경이 없는것들과 수정된것들 등 각 액션?에 따라 다르게 표시된답니다. 꼬북이 클라이언트에서 이 오버레이 되는 아이콘의 종류를 바꿀수도 있습니다.

.svn 디렉토리는 svn 클라이언트들이 관리하는 디렉토리와 파일들이므로 삭제하거나 변경하시면 안돼용..

자 그럼 좀 수정을 해서 저장소에 다시 넣어봅시다.

흠 걍 간단히 버튼 하나 올려놓고 저장소에 넣는것은 심심하니깐 뭔가 하나 해봅시다. -.ㅡa 멀할까요? 설마 Hello~ 씨리즈를...-.ㅡ;;;; 흠..맨날 찔끔찔끔 강좌같지도 않은거 가지고 대~ 델마당 시리즈 강좌란을 어지렵히니깐 좀 쓸모있는걸루...-.ㅡ;;; 흠 인디콤포넌트 중에서 IdSNTP 가지고 타임서버에서 시간가져와서 맞춰보는거 할까요? 얼마전에 보니 서버에서 시간 가져와서 동기화 시키는거 물어보시는분이 계시던데.. 뭐 그렇지 않더라도 시간동기화는 중요한데 많이들 인식을 못하시는것 같기도 하고...물론 윈도우에서 제공하기는 하지만...

IdSNTP 랑 Button 하나 올려놓고요..Button 더블클릭하셔서 OnClick 이벤트에 다음가 같이 코딩해봅시다..

  IdSNTP1.Host:= 'time.kriss.re.kr';
  IdSNTP1.Port:= 123;
  IdSNTP1.Active:= True;
  If IdSNTP1.SynkTime Then
    ShowMessage('동기화 성공');
  IdSNTP1.Active:= False;

(참고로 국내엔 타임서버가 많아서 그것들중에서 하나를 골라 사용해도 괜찮지만 세턴2 등급에 해당되는 서버들은 가급적이면 피해주시는것이 모두들 위해 좋습니다. 정밀한 시간동기화가 필요하지 않다면 세턴3 등급이나 타임서버 폴 을 이용해주세요 kr.pool.ntp.org 이 국내 타임서버 폴 주소입니다. 등록된 타임서버중 적당한곳으로 연결해줍니다. 위의 예로 든 타임서버는 앞으로의 진행을 위해 사용했습니다.)

자 컴팔해서 실행하고 잘 되는지 확인하시고요...이제 사본이 변경되었으니 저장소에 한번 넣어보도록 하겟습니다. 탐색기등에서 워킹 디렉토리를 보시면 변경된 파일이 있는 디렉토리는 아이콘 (기본 아이콘 말고 오버레이되는..svn 이 사용하는)이 바꿔져 보일껍니다. 또한 새로 생성된 파일들은 아이콘이 없고요.../build, build/dcu, /source디렉토리랑 unit1.pas, unit1.pas 가 붉은 바탕에 흰색 아이콘으로 보이는게 바로 변경되었다는 뜻입니다.

그런데 새로 생성된 파일들 실행파일이나 pa~ 같은 백업파일들은 커밋대상에 포함되지 않습니다. 물론 현재 얘네들은 저장소에 들어갈 이유는 없습니다. 실행파일이야 머...다시 컴파일하면 나오는거니깐..글쿠 백업파일들도 필요에 따라 필요할수도 있겟지만은 svn 에서 리비전으로 뺴오면 되죠...

하지만 진행을 위해서 실행파일도 커밋대상에 추가해보도록 하겟습니다. (꼬북이 클라이언트는 커밋할때 워킹 디렉토리에서 새로 생성된 파일을 조사해 커밋대상에 추가하겟냐고 물어봅니다.)

c:> svn add c:workProjectAbuildProjectA.exe


A (bin) c:workProjectAbuildProjectA.exe

위와 같은 메세지가 나오죠..A 는 Add 의 약자입니다. 이제 svn 은 ProjectA.exe 를 커밋대상 목록으로 관리합니다. 다른것도 추가할려는것을 추가해보세요...귀찮나요? ^^ svn 클라이언트도 재귀적으로 디렉토리를 탐색해서 새로 생성된파일 목록을 구해서 추가하는게 있었으면 좋을텐데...없나봅니다. 단지 와일드문자(*) 로 여러개의 파일이나 디렉토리에 한해서만 되는군요...이미 관리대상인것들은 경고메세지가 출력되고 아니것은 추가합니다. (새로이 관리대상이 된 파일들은 + 아이콘으로 보입니다.)

c:> svn add c:workProjectAsource*.*

자 그럼 관리대상도 포함 시켰고...커밋을 해봅시다.

c:> svn commit c:workProjectA

커밋로그를 작성하는 에디터에...커밋되는 파일목록이 보입니다. 로그를 작성하시고..다시한번 강조하지만 로그는 반드시 작성하도록 하세요...물론 로그내용을 기록하지 않아도 되지만요...적절히 기입하시고 저장후 종료합니다.

그럼 추가 나 전송중 등의 메세지와 함께 파일목록들이 출력되며 리비전 이 출력됩니다.

자 그럼 이것으로 대충이나마 svn 커맨드 라인 클라이어트를 이용해서 저장소에 집어넣고(Import) 빼오고(CheckOut), 변경한것을 커밋(Commit)해봤습니다.

연습 많이들 하시고요..다음 시간부터는 커맨드 라인 클라이언트 말고 꼬북이 클라이언트를 가지고 하겟습니다. 두번의 강자 내용으로 기본적인 커맨드 라인 클라이언트의 사용법은 설명해드린것 같고 물론 변경된점을 본다거나 뭐 그런건 다루지 않았지만 뭐 도움말 보심 다 들 아실꺼 같고...실은 명령어 때려넣기 귀찮아서 -.ㅡ;;;;

그럼...

 

번호 제목 글쓴이 날짜 조회 수
75 [VSS] Using Visual SourceSafe – How to backup & restore VSS DB file 황제낙엽 2016.07.12 7519
74 SVN 관련 FAQ [118] 황제낙엽 2006.01.16 6666
73 Subclipse - Subversion Eclipse Plugin (SVN) 황제낙엽 2007.04.05 2969
72 [SVN] VisualSVN Server 의 저장소 백업 및 복원 황제낙엽 2016.11.04 2761
71 SVN 사용시 revision 번호로 버전관리하는 방법 황제낙엽 2012.08.28 586
70 git 에서 CRLF 개행 문자 차이로 인한 문제 해결하기 file 황제낙엽 2016.09.29 572
69 버전관리 툴 ( CVS, SVN, VSS, BitKeeper, ClearCase ... ) file 황제낙엽 2005.11.11 548
68 VisualSVN svn 프로토콜 열기 (Open SVN protocol on VisualSVN) file 황제낙엽 2018.11.22 518
» SubVersion 설치 및 활용 (시리즈 강좌 - 03) 황제낙엽 2008.06.06 479
66 [VisualSVN] SSL 인증서 합치기 file 황제낙엽 2019.03.29 437
65 Previous operation has not finished; run 'cleanup' if it was interrupted file 황제낙엽 2018.04.02 435
64 윈도우에서 깃(git) 서버 설치하기 file 황제낙엽 2016.05.17 404
63 [VSS] How to force logout of all users on VSS? 황제낙엽 2016.07.12 395
62 윈도우에서 TortoiseSVN 아이콘 오버레이가 표시되지 않는 문제 file 황제낙엽 2019.02.12 388
61 git clone [bare/mirror] 정리 file 황제낙엽 2021.09.03 382
60 tortoise, subversion 자동 로그인 캐시 제거(로그아웃) 황제낙엽 2020.02.06 358
59 [SVN] VisualSVN 계정 관리 방법 file 황제낙엽 2017.05.26 352
58 태그(Tag) 생성 file 황제낙엽 2016.09.29 344
57 [VisualSVN] Importing an SSL certificate with private key 황제낙엽 2019.03.29 265
56 10분만에 파악해보는 What is GitHub (Hello World) file 황제낙엽 2016.10.04 236