윈도우 프로젝트 필수 유틸리티 2장 - Subversion으로 소스코드 관리하기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

2장 Subversion으로 소스코드 관리하기

이재홍 http://www.pyrasis.com 2007.10.27 ~ 2008.04.20

목차

  1. Subversion 설치
    1. Subversion 다운로드
    2. Subversion 설치
    3. TortoiseSVN 설치
      1. TortoiseSVN 언어팩 설치하기
      2. TortoiseSVN 언어팩 사용하기
  2. 저장소 만들기
    1. 저장소 만들기
    2. 저장소 설정
  3. Subversion 서버 사용하기
    1. 일반 모드로 사용하기
    2. 서비스 모드로 사용하기
  4. Subversion 명령 사용 방법
    1. 기본 에디터 지정하기
    2. 기본 디렉터리 생성
    3. 프로젝트에 파일 추가하기(Import)
    4. 저장소에서 소스 가져오기(Checkout)
    5. 프로젝트에 파일 추가하기(Add)
    6. 변경사항을 저장소에 반영하기(Commit)
    7. 최신 소스 받아오기(Update)
    8. 로그 보기(Log)
    9. 수정된 부분 확인하기(Diff)
    10. 수정된 것 되돌리기(Revert)
    11. 수정한 사람 보기(Blame)
    12. 파일, 디렉터리 잠그기(Lock), 잠금 풀기(Unlock)
    13. 파일, 디렉터리 이름 바꾸기(Rename)
    14. 소스만 가져오기(Export)
    15. 브랜치(Branch)와 태그(Tag)
      1. 브랜치(Branch)와 태그(Tag) 전환하기(Switch)
    16. 관리도구
      1. 저장소를 파일로 백업하기(Dump)
      2. 파일을 저장소로 복원하기(Load)

Subversion 설치

지금부터 Subversion을 설치하는 방법을 알아보고, Subversion의 기본 사용 방법에 대해 설명할 것입니다. 윈도우에서는 명령행 도구보다 GUI 도구를 많이 이용하므로 명령행 도구 사용법과 GUI 도구인 TortoiseSVN 사용법을 동시에 설명하겠습니다.

윈도우용 Subversion과 TortoiseSVN은 설치 파일 형태로 배포되고 있어서, 설치에는 별 어려움이 없습니다. 이 장에서는 일반적으로 Subversion을 사용하기 위한 설치 방법을 설명할 것입니다. 뒤에서는 아파치를 사용하는 저장소 서버를 구축하기 위한 설치 방법을 설명하겠습니다.

Subversion 다운로드

이 책에서는 svn-1.4.6-setup.exe를 사용하겠습니다. Subversion의 공식 웹사이트는 http://subversion.tigris.org입니다. 윈도우용 Subversion은 아래 URL에서 받을 수 있습니다.

ZIP 파일로 배포되는 것을 사용하고자 할 경우 Subversion이 설치된 디렉터리를 환경변수의 Path에 넣어주어야 합니다. 설치 파일로 설치하면 자동으로 환경변수의 Path에 Subversion이 설치된 경로를 넣어줍니다.

TIP
Subversion 클라이언트 프로그램은 Apache 2.0용과 Apache 2.2용이 있습니다. Apache 2.2를 사용하여 Subversion 서버를 구축하려면 Apache 2.2용 Subversion을 사용해야 합니다. 하지만 이 장에서는 Subversion의 기본적인 사용법을 알아볼 것이기 때문에 Apache 2.0, 2.2 어떤 것을 사용하여도 상관 없습니다. 주의할 점은 Apache 2.0과 2.2용 설치 파일의 이름이 똑같기 때문에 구분하기가 쉽지 않다는 것입니다. 따라서 다운로드 하는 페이지를 다시 한번 확인해 볼 필요가 있습니다. 아래 화면은 Apache 2.2용 Subversion 설치 파일을 받는 곳입니다.

  • http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100&expandFolder=8100&folderID=8100



그림 2-1 Apache 2.2용 Subversion 다운로드 페이지

Subversion 설치

  1. Subversion 실행 파일을 다운로드하여 실행시키면 인스톨할 것인지 묻는 Setup 대화상자가 나타납니다. 예(Y)를 눌러 설치를 시작합니다.


    그림 2-2 Subversion 설치 시작

  2. Subversion 설치마법사가 나타나서 다시 한번 설치할 것인지 물으면, Next를 눌러 다음으로 넘어갑니다.


    그림 2-3 Apache 2.2용 Subversion 설치 마법사

  3. 다음 그림에서 Subversion에 대한 간단한 설명이 나옵니다. Next를 눌러서 설치를 계속합니다.


    그림 2-4 Subversion에 대한 간단한 설명

  4. [그림 2-5]는 Subversion을 어디에 설치할 것인지 디렉터리를 지정하는 화면입니다. 적당하게 디렉터리를 지정하면 되는데 여기서는 기본 설정대로 Program Files 디렉터리 아래에 설치합니다.


    그림 2-5 Subversion이 설치될 디렉터리 지정

  5. 시작 메뉴에 Subversion을 등록할 것인지를 설정하는 화면입니다. 화면 아래쪽에 있는 Don't create a Start Menu folder의 체크박스를 선택하면 시작메뉴에 등록되지 않습니다.


    그림 2-6 Subversion의 시작 메뉴 등록 설정

  6. [그림 2-7]은 Subversion 아이콘 설정에 관한 내용입니다. Desktop icons: 아래에 있는 첫 번째 체크박스에 체크를 하면 바탕 화면에 Subversion 메뉴얼 문서의 바로 가기를 만듭니다. 그리고 Quick Launch icons: 아래에 있는 두 번째 체크박스에 체크를 하면 Subversion 메뉴얼 문서의 바로 가기를 빠른 실행 아이콘으로 등록하게 됩니다.


    그림 2-7 Subversion 문서의 아이콘 설정

  7. 이제 설치에 필요한 준비가 모두 끝났습니다. Install 버튼을 눌러 설치를 시작합니다.


    그림 2-8 Subversion 설치 준비 화면

  8. Install 버튼을 누르면 파일 복사 화면이 나타나서 진행과정을 보여줍니다.


    그림 2-9 Subversion 파일 복사 화면

  9. 파일 복사가 끝나면 윈도우98에 설치했을 때 APR_ICONV_PATH를 설정하는 방법을 알려줍니다. 한 번 읽어보고 Next를 누릅니다.


    그림 2-10 윈도우98에 설치했을 때 APR_ICONV_PATH를 설정하는 방법

  10. [그림 2-11]과 같은 대화상자가 나타나면 설치가 성공적으로 완료된 것입니다. Finish 버튼을 눌러 설치를 종료합니다.


    그림 2-11 Subversion 설치 완료

TortoiseSVN 설치

CVS에는 TortoiseCVS라는 유명한 GUI 클라이언트가 있습니다. Subversion에도 TortoiseCVS와 똑같은 방식의 TortoiseSVN(일명 거북이 SVN)이라는 프로그램이 있습니다. 이 TortoiseSVN은 윈도우의 쉘(explorer.exe) 확장 프로그램으로서 탐색기의 팝업 메뉴에서 Subversion 작업을 할 수 있습니다.

여러 해 개발을 거듭하면서 TortoiseSVN은 TortoiseCVS 보다 더 완성도 높은 프로그램이 되었으며, 다양한 언어와 x64 플랫폼을 지원합니다. TortoiseSVN의 공식 웹사이트는 http://tortoisesvn.net입니다. 설치 파일은 아래 URL에서 받을 수 있습니다.

  • http://tortoisesvn.net/downloads

TortoiseSVN를 설치하면 기본적으로 메뉴의 언어가 영어입니다. 한글 메뉴를 사용하려면 한국어 언어팩을 받습니다. 이 책에서는 TortoiseSVN은 TortoiseSVN-1.4.8.12137-win32-svn-1.4.6.msi, 언어팩은 LanguagePack-1.4.8.12137-win32-ko.exe을 사용하도록 하겠습니다. 이 설치 파일들은 부록 CD에도 포함되어 있습니다.

  1. 설치 파일을 다운로드하여 실행시키면 설치할 파일의 버전이 표시된 화면이 나타나면서 설치가 시작됩니다. Next를 누릅니다.


    그림 2-12 TortoiseSVN 설치 마법사

  2. 라이센스 동의화면이 나타나면 I accept the terms in the License Agreement를 선택하고 Next를 누릅니다.


    그림 2-13 라이센스 동의 화면

  3. 추가 아이콘과 영문(미국, 영국) 사전을 선택적으로 설치 할 수 있고, TortoiseSVN의 설치 경로를 지정할 수 있습니다. 이 사전들은 커밋 로그 메시지를 작성할 때나 오타 여부를 알려줄 때 사용됩니다. 물론 영어 단어만 해당됩니다. 설치 경로는 특별한 이유가 없으면 기본 설정대로 설치합니다.


    그림 2-14 아이콘 및 사전 선택, TortoiseSVN 설치 경로 설정 화면

  4. Install을 누르면 설치가 시작됩니다. 만일 인스톨할 내용을 변경하고 싶으면 Back 버튼을 눌러 이전화면에서 설정 내용을 바꿔줍니다.


    그림 2-15 TortoiseSVN 설치 준비 화면


    그림 2-16 TortoiseSVN 파일 복사 화면

  5. 버전이 다시 한번 표시되고 설치가 완료되었음을 알려줍니다. Finish를 눌러 설치를 끝냅니다.


    그림 2-17 TortoiseSVN 설치 완료

  6. 설치가 끝나면 다시 부팅하라는 메시지가 나타납니다. TortoiseSVN은 쉘(explorer.exe) 확장 프로그램이기 때문에 재부팅하지 않으면 오버레이 아이콘이 정상적으로 표시되지 않을 수도 있습니다. 재부팅을 하지 않고 사용하려면 작업 관리자에서 explorer.exe를 종료한 뒤 다시 실행하면 됩니다.


    그림 2-18 재부팅 경고 화면

TortoiseSVN 언어팩 설치하기

  1. 이제 언어팩을 설치할 것입니다. LanguagePack-1.4.8.12137-win32-ko.exe 파일을 실행시킵니다.


    그림 2-19 TortoiseSVN 언어팩 설치 시작 화면

  2. 언어팩 파일 복사 화면이 나타납니다.


    그림 2-20 TortoiseSVN 언어팩 파일 복사 화면

  3. TortoiseSVN 언어팩 설치가 완료되었습니다. 마침을 눌러 설치를 종료합니다.


    그림 2-21 TortoiseSVN 언어팩 설치 완료

TortoiseSVN 언어팩 사용하기

  1. 바탕 화면에서 마우스 오른쪽 버튼을 클릭하여 팝업 메뉴를 실행하고 TortoiseSVN→Settings를 선택합니다.


    그림 2-22 TortoiseSVN 설정 실행하기

  2. TortoiseSVN Settings 대화상자가 나타나면 Language에서 한국어를 선택하고 확인 버튼을 누르면 한글 메뉴를 사용할 수 있습니다.


    그림 2-23 TortoiseSVN 한국어 설정

저장소 만들기

예제로 사용할 저장소를 만들어보겠습니다. 저장소는 현재 사용하고 있는 컴퓨터의 C:\Repos 디렉터리 아래에 만들도록 하겠습니다. 일반적으로 회사에서 개발을 하게 되면 중앙 서버에 설치되어 있는 저장소를 사용할 것입니다. 하지만 이번 예제는 회사에 중앙 서버가 구축 되어 있지 않거나, 개인적으로 소스 관리를 할 일이 있을 때 활용하면 됩니다.

저장소 만들기

C:\Repos 디렉터리에 프로젝트의 저장소를 바로 생성해서는 안됩니다. C:\Repos 디렉터리는 각 저장소의 부모 디렉터리입니다. 그렇기 때문에 C:\Repos아래에 각 프로젝트의 디렉터리를 만들고 저장소를 만드는 것입니다. 앞으로 Subversion과 관련된 유틸리티를 사용할 때 설정상 이 부모 디렉터리의 경로가 자주 사용됩니다.

시작 → 모든 프로그램 → 보조 프로그램 → 명령 프롬프트를 실행하고 아래와 같이 입력하여 저장소를 생성합니다.

C:\>mkdir C:\Repos
C:\>cd C:\Repos
C:\Repos>svnadmin create sample

TortoiseSVN에서는 다음과 같이 실행합니다.

C:\Repos 아래에 sample 디렉터리를 만들고 TortoiseSVN → 현재 위치에 저장소 생성(Y)...을 선택합니다.


그림 2-24 저장소 생성 방법

현재 위치에 저장소 생성(Y)를 선택하면 저장소 형식을 지정하는 화면이 나옵니다. 고유의 파일시시스템(Native FS, FSFS)와 버클리 데이터베이스(B) (BDB)를 선택할 수 있습니다. Subversion이 처음 나왔을 당시에는 BDB 방식 밖에 지원하지 않았습니다. BDB 방식이 안정성에 문제가 있어 FSFS 방식이 추가 되었습니다. 요즘은 FSFS 방식을 대부분 사용합니다. 이번 예제에서는 FSFS 방식을 사용하도록 하겠습니다. 확인을 누르면 저장소가 생성됩니다.


그림 2-25 저장소 형식 선택 화면

그림 2-26 저장소 생성 완료

저장소가 정상적으로 생성되었습니다. 저장소가 생성되면 버전 관리를 위한 기본 구조가 생성됩니다.


그림 2-27 sample 저장소가 성공적으로 생성된 화면

저장소 설정

각 프로젝트 저장소에는 conf 디렉터리가 있습니다. 그 안에는 svnserve.conf, passwd, authz 파일이 들어 있습니다.

  • svnserve.conf : svnserve를 사용하여 저장소 서버를 구성할 때 사용합니다. 이 파일을 설정해 주지 않으면 svnserve를 통하여 저장소에 접근 할 수 없습니다.
  • passwd : svnserve에서 사용하는 사용자 ID와 암호 설정 파일입니다. 암호는 암호화되지 않은 텍스트로 바로 저장됩니다. 이 파일은 저장소 컴퓨터에 접근 할 수 있는 사람만 볼 수 있기 때문에 암호화되지 않더라도 큰 문제는 없습니다. 이미 암호 설정 파일을 볼 정도로 서버에 접근했다 하는 것은 저장소를 모두 가져갈 수 있는 위치에 와 있다는 것입니다. 암호를 암호화 되지 않은 텍스트로 저장하고 싶지 않은 경우에는 Apache와 연동해야 합니다.
  • authz : svnserve와 Apache에서 사용하는 파일, 디렉터리별 접근 권한 설정 파일입니다. 특정 파일, 디렉터리에 대해 각 사용자에게 읽기, 쓰기 권한을 지정할 수 있습니다. 사용자를 그룹화 하여 지정할 수도 있습니다.


그림 2-28 sample 저장소의 설정 파일

svnserve.conf의 내용에 대해 알아보겠습니다.

svnserve.conf
### This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository.  (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)

### Visit http://subversion.tigris.org/ for more information.

[general]
### These options control access to the repository for unauthenticated
### and authenticated users.  Valid values are "write", "read",
### and "none".  The sample settings below are the defaults.
anon-access = read
auth-access = write
### The password-db option controls the location of the password
### database file.  Unless you specify a path starting with a /,
### the file's location is relative to the conf directory.
### Uncomment the line below to use the default password file.
password-db = passwd
### The authz-db option controls the location of the authorization
### rules for path-based access control.  Unless you specify a path
### starting with a /, the file's location is relative to the conf
### directory.  If you don't specify an authz-db, no path-based access
### control is done.
### Uncomment the line below to use the default authorization file.
authz-db = authz
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa.  The default realm
### is repository's uuid.
# realm = My First Repository

general 항목의 anon-access는 로그인 여부에 관계 없이 접근 방식을 설정하는 부분입니다. write는 쓰기 허용, read는 읽기 허용, none는 읽기/쓰기를 모두 금지합니다. auth-access는 로그인 한 사용자에게 한해 접근 방식을 설정하는 부분입니다. 마찬가지로 write는 쓰기 허용, read는 읽기 허용 none는 읽기/쓰기를 모두 금지합니다. password-db의 passwd 파일은 사용자 ID와 암호를 설정하는 파일입니다.

기본적으로는 각 저장소의 passwd 파일을 사용하며, 다른 파일을 지정할 수 있습니다. svnserve를 사용하려면 anon-access, auth-access, passwd-db 부분이 설정되어 있어야 합니다. 파일, 디렉터리별 접근 권한을 지정하고 싶은 경우 authz-db를 설정합니다. 기본적으로 각 저장소의 authz 파일을 사용하며, 다른 파일을 지정할 수 있습니다. realm은 저장소 이름을 지정하는 부분입니다. authz-db와 realm 부분을 설정하지 않아도 svnserve를 사용할 수 있습니다.

설정 항목권한설명
anon-accessnone로그인 하지 않은 사용자에게 읽기, 쓰기 금지
read로그인 하지 않은 사용자에게 읽기만 허용
write로그인 하지 않은 사용자에게 읽기, 쓰기 허용
auth-accessnone로그인 한 사용자에게 읽기, 쓰기 금지
read로그인 한 사용자에게 읽기만 허용
write로그인 한 사용자에게 읽기, 쓰기 허용
표 2-1 svnserve.conf 파일에서 권한 설정 방법

이번 예제에서 만든 sample 저장소는 앞으로 Subversion 기본 사용법을 익힐 때 계속 사용할 것입니다. 따라서 svnserve.conf 파일을 다음과 같이 설정합니다.

C:\Repos\sample\conf\svnserve.conf
anon-access = none
auth-access = write

password-db = passwd

authz-db = authz

다음은 passwd 파일의 내용에 대해서 알아 보겠습니다.

passwd
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
# harry = harryssecret
# sally = sallyssecret

users 항목에 사용자를 설정합니다. 설정하는 방식은 '사용자ID = 암호'와 같습니다. 사용자는 한 줄에 한 명씩 설정하며, 여러 명을 설정할 수 있습니다.

마찬가지로 이번 예제에서 만든 sample 저장소는 앞으로 계속 사용할 것이므로 passwd 파일을 아래와 같이 사용자ID는 sampleuser, 암호는 abcd1234로 설정합니다.

C:\Repos\sample\conf\passwd
[users]
sampleuser = abcd1234

TIP
실제로 암호를 abcd1234 처럼 간단하게 지정하지는 마세요. 간단한 암호는 보안상 위험하므로 주의해야 합니다.

이번에는 권한 설정 파일인 authz 파일에 대해서 알아보겠습니다.

authz
### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
### As shown below each section defines authorizations for the path and
### (optional) repository specified by the section name.
### The authorizations follow. An authorization line can refer to a
### single user, to a group of users defined in a special [groups]
### section, or to anyone using the '*' wildcard.  Each definition can
### grant read ('r') access, read-write ('rw') access, or no access
### ('').

[groups]
# harry_and_sally = harry,sally

# [/foo/bar]
# harry = rw
# * =

# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r

위의 내용은 저장소를 생성할 때의 기본 authz 파일의 내용입니다. [groups]에서 여러 사용자를 그룹으로 지정할 수 있습니다. [/foo/bar] 처럼 경로를 지정하고 그 아래에 접근 권한을 설정합니다. 각 사용자 ID에 대해 r은 읽기만 허용, rw는 읽기 쓰기 허용, = 뒤에 아무것도 설정하지 않으면 읽기/쓰기 모두 금지입니다. *는 모든 사용자에 대한 권한을 설정하는 것입니다. 그룹에 대해 지정하려면 그룹명 앞에 @을 붙입니다.

여러 저장소가 이 authz 파일을 공통으로 사용할 경우 [repository:/baz/fuz] 처럼 경로에 저장소를 지정해주어야 합니다. 디렉터리뿐만 아니라 [/trunk/readme.txt] 처럼 파일도 지정해 줄 수 있습니다.

경로설명
[/foo/bar]foo아래 bar 디렉터리에 대한 경로 설정
[/trunk:/readme.txt]trunk 디렉터리 아래에 readme.txt 파일에 대한 경로 설정
[sample:/trunk]sample 저장소의 trunk 디렉터리에 대한 경로 설정
[sample:/branches/hello.c]sample 저장소의 trunk 디렉터리 아래에 hello.c 파일에 대한 경로 설정
표 2-2 authz 파일에서 저장소별 경로 설정 방법

설명사용자 및 그룹
사용자 harry
모든 사용자*
그룹 @harry_and_sally
표 2-3 authz 파일에서 사용자 및 그룹 설정 방법

권한설명
rw해당 사용자, 그룹에 대해 읽기, 쓰기 허용
r해당 사용자, 그룹에 대해 읽기만 허용
공백해당 사용자, 그룹에 대해 읽기, 쓰기 금지
표 2-4 authz 파일에서 권한 설정 방법

이번 예제에서는 authz 파일을 아래와 같이 설정합니다. [/] 모든 경로에 대해 sampleuser는 읽기, 쓰기를 가능하도록 설정합니다.

C:\Repos\sample\conf\authz
[/]
sampleuser = rw

TIP
svnserve.conf에서 'authz-db = authz'만 설정하고 실제 authz 파일에서 권한 설정을 해주지 않았다면 커밋, 체크아웃할 때 '인증 실패' 오류가 발생하게 됩니다. 따라서 경로, 사용자별로 권한 설정을 할 필요가 없을 때에는 svnserve.conf에서 'authz-db = authz'를 설정하지 않아야 합니다. 'authz-db = authz'로 설정했다면 꼭 authz 파일에서 경로, 사용자별로 권한 설정을 해주어야 합니다.

Subversion 서버 사용하기

Subversion은 서버로 실행되는 프로그램입니다. 서버로 실행하는 방법에는 일반모드와 서비스 모드 두 가지가 있습니다.

svn:// 프로토콜 서버인 svnserve를 사용하는 방법을 설명하도록 하겠습니다. svnserve는 명령행 도구입니다. 시작 → 실행 → cmd.exe를 입력하여 윈도우의 명령 프롬프트를 실행하고 svnserve --help를 입력하면 옵션들의 도움말을 볼 수 있습니다.

  • -d [--daemon] : 데몬 모드입니다. svnserve는 일반 모드와 서비스 모드로 실행할 수 있는데, -d는 일반 모드로 실행하는 옵션입니다.
  • --listen-port : 기본 포트 3690이외의 포트를 사용하고자 할 때 설정합니다.
  • --listen-host : 컴퓨터에 IP가 여러 개 일 때 하나의 IP를 지정하여 사용하고자 할 때 설정합니다.
  • -r [--root] : 저장소들이 모여있는 부모 디렉터리나 개별 저장소의 경로를 지정합니다. 이번 예제에서는 부모 디렉터리를 C:\Repos로 만들었습니다. 이 부분을 C:\Repos\sample 처럼 하나의 프로젝트 저장소로 지정할 경우 sample 저장소만 사용할 수 있습니다. C:\Repos로 지정하면 이 부모 디렉터리 아래에 있는 모든 프로젝트를 사용할 수 있습니다.
  • --service : 서비스 모드로 실행할 때 사용합니다. 이 옵션은 서비스를 따로 등록해주어야 사용할 수 있습니다.

일반 모드로 사용하기

일반 모드로 실행하는 방법은 Subversion 서버를 수동으로 실행하는 것입니다. 명령 프롬프트에서 다음 명령으로 Subversion 서버를 일반 모드로 실행합니다.

svnserve.exe -d -r C:\Repos
svnserve.exe -d -r C:\Repos --listen-port 7777

-d는 Subversion 서버를 일반 모드(Daemon)로 실행하는 것이며, -r은 저장소 위치를 지정합니다. 여기서는 저장소 위치를 C:\Repos로 지정했습니다.

Subversion 서버의 기본 포트인 3690과 충돌이 발생하거나 보안상의 이유로 외부 노출을 피하고 싶다면 --listen-port 옵션으로 포트 번호를 변경할 수 있습니다. 다음은 포트 번호를 7777로 변경한 예입니다.

svnserve.exe -d -r C:\Repos --listen-port 7777

서비스 모드로 사용하기

서비스 모드는 일반 모드와는 달리 윈도우 서비스로 등록해서 Subversion 서버를 실ㄹ행하는 방법입니다. 서비스 등록을 통해 Subversion 서버의 자동 시작 여부를 지정하고, 실행할 수 있습니다.

서비스 모드 등록은 윈도우 관리 명령인 sc 명령을 이용합니다. Subversion을 서비스 모드로 등록하는 명령은 다음과 같습니다.

sc \\experience create svnserve binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service -r C:\Repos" DisplayName= "Subversion svnserve"

\experience는 현재 필자의 컴퓨터 이름입니다. 독자는 자신의 컴퓨터 이름으로 바꿔주어야 합니다. create는 윈도우 서비스를 생성하는 명령입니다. binpath는 서비스로 등록할 프로그램을 지정합니다. 여기서는 svnserve.exe --service -r C:\Repos를 지정합니다. svnserve.exe의 옵션인 --service는 서비스 모드로 서버를 실행할 것을 지정하고, -r C:\Repos는 저장소 위치를 지정합니다.

서비스 모드를 등록할 때도 필요하면 포트를 변경할 수 있습니다. 다음은 포트 번호를 7777번으로 서비스를 등록하는 명령입니다.

sc \\experience create svnserve binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service -r C:\Repos --listen-port 7777" DisplayName= "Subversion svnserve"
TIP

자신의 컴퓨터 이름은 '시스템 등록정보 → 컴퓨터 이름'에서 '전체 컴퓨터 이름:'에서 확인하거나 명령 프롬프트에서 echo %COMPUTERNAME% 명령으로 확인할 수 있습니다.

binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service -r C:\Repos" 부분에서 = 다음에 공백 한 칸이 꼭 있어야 합니다. 이 부분이 붙어 있으면 sc 명령이 실행되지 않습니다.


그림 2-29 자신의 컴퓨터 이름 알아오기, sc 명령으로 서비스 등록

관리 도구의 서비스에서 Subversion service를 시작하거나 종료 할 수 있고, 명령 프롬프트 창에서 net start svnserve, net stop svnserve로도 시작, 종료 할 수 있습니다.


그림 2-30 관리 도구 → 서비스

서비스 → Subversion serve → 속성 → 일반에서 시작 유형을 '자동'으로 설정해주어야 재부팅 후에도 svnserve 서비스가 자동으로 실행됩니다.


그림 2-31 Subversion svnserve 서비스를 자동 실행하도록 설정

이런 방법으로 svnserve를 실행하면 svn://(IP 주소)/(개별 저장소 이름) 형태 URL로 저장소에 접근할 수 있습니다. 이번 예제에서는 자신의 컴퓨터에 저장소가 있고 sample이라는 프로젝트를 만들었기 때문에 svn://127.0.0.1/sample 또는 svn://localhost/sample로 접근할 수 있습니다.

TIP
svnserve 서비스를 삭제하려면 시작 → 실행에서 아래 명령을 실행합니다.

sc \\experience delete svnserve

Subversion 명령 사용 방법

이제부터 앞에서 만든 sample 저장소를 사용하여 Subversion의 기본적인 명령 사용법과 저장소에 파일들을 추가하여 새로운 프로젝트를 시작하는 방법에 대해서 알아보겠습니다. 이번 예제는 절대 중간부터 하지 말고 처음부터 천천히 따라하기 바랍니다.

기본 에디터 지정하기

먼저 Subversion의 svn.exe를 사용하기 위해서는 기본 에디터를 지정해주어야 합니다. 기본 에디터는 환경 변수에 SVN_EDITOR를 만들고 에디터의 실행파일 경로를 설정해 줍니다.

기본 에디터를 지정하지 않고 사용하려면 svn.exe 명령을 내릴 때 마다 -m "로그 메시지"의 형태로 로그 메시지를 지정해주면 됩니다.

svn ci -m "main 함수 수정"

  1. 시작 → 제어판 → 시스템 → 고급 탭에서 환경 변수(N) 버튼을 누릅니다.

  2. 사용자 변수와 시스템 변수가 있는데 시스템 변수에 추가합니다. 아래쪽에 있는 새로 만들기(W) 버튼으로 추가를 하면 됩니다.


    그림 2-32 환경 변수의 시스템 변수에 SVN_EDITOR를 추가하는 화면

  3. 이 책에서는 일반 모드로 svnserve.exe를 실행하여 실습을 진행하겠습니다. 명령 프롬프트를 열고 다음과 같이 실행합니다.

svnserve.exe -d -r C:\Repos

기본 디렉터리 생성

저장소를 처음 생성하면 저장소에는 아무 내용도 들어있지 않습니다. 프로젝트를 시작하기 전 기본 디렉터리인 trunk, branches, tags를 만들어주어야 합니다.

앞에서 환경 변수를 등록했으니 새로운 명령 프롬프트를 열고 다음 명령을 실행합니다. 환경 변수에 새로운 값을 등록했다면 명령 프롬프트를 새로 열어야 등록된 환경 변수가 적용됩니다.

svn mkdir svn://127.0.0.1/sample/trunk
svn mkdir svn://127.0.0.1/sample/branches
svn mkdir svn://127.0.0.1/sample/tags

svn 명령을 실행하면 SVN_EDITOR에 설정한 에디터가 실행되며, 에디터에 적절한 로그 메시지를 입력하고 저장한 뒤 종료합니다.


그림 2-33 메모장에서 커밋 로그를 입력하는 화면

svn 명령을 처음 실행했다면 그림과 같이 사용자명과 암호를 입력하라고 합니다. 기본적으로 현재 컴퓨터의 계정이 표시되고 암호를 입력하라고 하는데, 다시 한번 엔터를 치면 사용자명을 입력할 수 있습니다. 암호까지 정확하게 입력하면 커밋이 됩니다. 이후 사용자명과 암호는 저장되기 때문에 다시 입력할 필요가 없습니다. 암호가 저장되지 않게 하려면 --no-auth-cache 옵션을 사용하면 됩니다.


그림 2-34 사용자명과 암호 입력

TIP
"svn: 호스트 '127.0.0.1'에 접속할 수 없습니다.: 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다."라는 오류 메시지가 나올 때

  1. svnserve.exe가 정상적으로 실행되고 있는가?(일반 모드) 아니라면 새로운 명령 프롬프트를 열고 "svnserve.exe -d -r C:\Repos"를 실행합니다.
  2. 서비스 모드일 경우 서비스를 시작했는가? 아니라면 명령 프롬프트에서 "net start svnserve"를 실행하거나 관리 도구의 서비스에서 Subversion svnserve 서비스를 시작합니다.


"svn: 인증 실패"라는 에러 메시지가 나올 때

  1. C:\Repos\sample\conf 디렉터리 아래에 svnserve.conf 파일을 열고 아래와 같이 anon-access, auth-access, password-db가 정상적으로 설정되어 있는지 확인합니다.
anon-access = none
auth-access = write

password-db = passwd
  1. C:\Repos\sample\conf 디렉터리 아래에 svnserve.conf 파일에서 아래와 같이 authz-db를 'authz-db = authz'로 설정했다면 C:\Repos\sample\conf 디렉터리 아래에 authz 파일을 다음과 같이 설정되어 있는지 확인합니다.
[/]
sampleuser = rw
  1. C:\Repos\sample\conf 디렉터리 아래에 passwd 파일을 열고 아래와 같이 사용자 설정이 정상적으로 되어 있는지 확인합니다.
[users]
sampleuser = abcd1234
  1. C:\Repos\sample\conf 디렉터리의 authz 파일에서 쓰기 권한을 막아놓지는 않았는지 확인합니다.

TortoiseSVN으로 디렉터리를 만들려면 '저장소 브라우저'를 사용하면 편리합니다. 바탕 화면에서 마우스 오른쪽 버튼을 눌러 TortoiseSVN → 저장소 브라우저(R)를 선택합니다.


그림 2-35 TortoiseSVN 저장소 브라우저 실행 방법

저장소 브라우저를 실행하고 저장소의 URL을 입력합니다.


그림 2-36 TortoiseSVN 저장소 브라우저의 URL 입력 화면

디렉터리를 만들 곳을 클릭한 뒤 마우스 오른쪽 버튼을 누르면 메뉴가 나옵니다. 폴더 생성(R)을 선택합니다.


그림 2-37 TortoiseSVN 저장소 브라우저에서 폴더 생성 방법

이름을 입력하고 확인을 누릅니다.


그림 2-38 생성할 폴더 이름 입력

적절한 로그 메시지를 입력하고 확인을 누르면 디렉터리가 생성 됩니다.


그림 2-39 로그 메시지 입력 화면

프로젝트에 파일 추가하기(Import)

새로운 프로젝트에 파일을 추가하는 방법은 두 가지가 있습니다. import 명령으로 프로젝트의 파일들을 직접 저장소에 추가하는 방식과 빈 저장소를 체크아웃한 뒤 add 명령으로 파일과 디렉터리를 추가하고 커밋하는 방법이 있습니다.

그럼 import로 프로젝트에 파일을 추가해 보겠습니다. 먼저 바탕 화면에 sample이라는 디렉터리를 만들고 그 디렉터리 아래에 sample.c라는 빈 파일도 만듭니다.


그림 2-40 sample 디렉터리에 sample.c 파일 생성

명령 프롬프트에서 바탕 화면의 sample 디렉터리로 이동한 뒤 svn import 명령을 실행하면 sample 디렉터리 아래에 있는 모든 파일 및 디렉터리가 저장소로 추가됩니다. 명령 프롬프트에서 경로명은 큰따옴표(" ")로 감싸주어야 정확히 인식합니다.

cd "C:\Documents and Settings\xp\바탕 화면\sample"
C:\Documents and Settings\xp\바탕 화면\sample>svn import svn://127.0.0.1/sample/trunk

TortoiseSVN에서는 임포트(Import) 메뉴에서 프로젝트를 저장소에 추가할 수 있습니다.

탐색기에서 바탕 화면의 sample 디렉터리로 이동합니다. 그리고 sample 디렉터리의 빈 공간을 마우스 오른쪽 버튼으로 클릭 한 뒤 TortoiseSVN → 임포트(I)... 메뉴를 실행합니다. 이때 실수로 파일을 선택하면 안됩니다.

임포트를 실행시키는 또다른 방법은 바탕 화면에서 sample 폴더를 선택한 채로 TortoiseSVN → 임포트(I)... 메뉴를 실행해도 됩니다.


그림 2-41 TortoiseSVN 임포트 실행 방법

저장소 URL과 임포트 메시지를 입력하고 확인을 누르면 프로젝트가 추가됩니다.


그림 2-42 저장소 URL 설정 및 임포트 메시지 입력 화면

저장소에서 소스 가져오기(Checkout)

바탕 화면에 만든 sample 디렉터리를 import 했다면, 삭제하거나 다른 곳으로 옮겨 놓습니다. import에 사용한 프로젝트의 디렉터리는 프로젝트를 추가할 때만 사용할 뿐 Subversion으로 관리되지 않기 때문에 필요가 없습니다. Subversion으로 관리하기 위해서는 다시 체크아웃 해야 합니다.

아래 명령을 실행하면 바탕 화면에 sample이라는 디렉터리에 프로젝트의 소스가 체크아웃 됩니다.

C:\Docments and Settings\xp\바탕 화면>svn co svn://127.0.0.1/sample/trunk sample

TortoiseSVN은 체크아웃 메뉴를 사용합니다. 바탕 화면에서 SVN 체크아웃(K)...를 실행합니다. 그런 다음 저장소 URL을 지정하고 체크아웃할 디렉터리를 설정합니다. 체크아웃할 디렉터리를 바탕 화면으로만 해놓으면 바탕 화면에 프로젝트의 파일 및 디렉터리들이 바로 체크아웃되어 사용하기 불편해지므로 주의하시기 바랍니다.


그림 2-43 체크아웃 실행 방법


그림 2-44 TortoiseSVN 체크아웃 화면

프로젝트에 파일 추가하기(Add)

새로운 파일을 추가할 때에는 svn add 명령을 사용합니다. svn add로 추가 한 뒤 svn ci 명령으로 커밋을 해야 저장소에 추가한 파일이 들어가게 됩니다.

C:\Documents and Settings\xp\바탕 화면\sample>svn add hello.c
C:\Documents and Settings\xp\바탕 화면\sample>svn ci

TortoiseSVN에서는 추가, 커밋 메뉴를 사용합니다. 추가할 파일이 있는 폴더로 이동하여 마우스 오른쪽 버튼으로 추가할 파일을 선택한 뒤 TortoiseSVN의 추가(A)... 메뉴를 실행합니다.


그림 2-45 TortoiseSVN 추가 실행 방법

파일 하나만 선택하여 추가했다면 [rmfla 2-46]과 같은 화면이 나올 것입니다. 파일, 디렉터리를 드래그하여 여러 개 추가할 경우 파일, 디렉터리가 여러 개 표시되는데, 이때 체크박스를 통해 추가할 것인지 추가하지 않을 것인지를 지정할 수 있습니다.


그림 2-46 추가할 파일을 선택하는 화면

추가 메뉴로 추가를 하면 파일의 아이콘에 + 표시가 붙게 되며, 커밋을 해야 완전히 저장소에 들어가게 됩니다.


그림 2-47 hello.c 파일이 추가된 화면

변경사항을 저장소에 반영하기(Commit)

파일을 수정했거나 추가한 뒤에는 커밋을 해야 저장소에 반영이 됩니다. svn ci, svn commit으로 사용합니다.

먼저 hello.c에 아래의 내용을 저장하고 커밋합니다.

hello.c
#include <stdio.h>

int main()
{
    printf("hello world");
}
C:\Documents and Settings\xp\바탕 화면\sample>svn ci

TortoiseSVN에서는 마우스 오른쪽 버튼으로 파일을 선택해서 SVN 커밋(C)... 메뉴를 사용합니다. 파일을 수정하면 오버레이 아이콘이 붉은색 !로 변하게 됩니다.


그림 2-48 TortoiseSVN 커밋 실행 방법

로그 메시지를 입력하고 확인을 누르면 커밋이 완료됩니다.


그림 2-49 커밋 로그 메시지 입력 화면

최신 소스 받아오기(Update)

공동 작업을 하는 경우 다른 사람이 소스를 수정하였을 것입니다. 이때 저장소에서 최신 소스를 받아오는 명령이 svn up 또는 svn update 명령입니다.

C:\Documents and Settings\xp\바탕 화면\sample>svn up

TortoiseSVN에서는 업데이트 메뉴를 사용합니다. 바탕 화면의 sample 디렉터리의 빈 공간에서 마우스 오른쪽 버튼을 클릭한 뒤 SVN 업데이트(U) 메뉴를 실행합니다. 만일 파일을 선택하고 SVN 업데이트(U) 메뉴를 실행하면 선택한 파일만 업데이트 됩니다.


그림 2-50 TortoiseSVN 업데이트 실행 방법

저장소에 새로 추가되거나 변경된 파일이나 디렉터리가 있을 경우에는 업데이트 창에 표시됩니다.


그림 2-51 TortoiseSVN 업데이트 실행 화면

로그 보기(Log)

현재까지 있었던 작업의 로그를 살펴보고 싶은 경우 svn log 명령을 사용합니다.

C:\Documents and Settings\xp\바탕 화면\sample>svn log

TortoiseSVN에서는 로그 보기 메뉴를 사용합니다. 바탕 화면의 sample 디렉터리의 빈 공간에서 마우스 오른쪽 버튼을 클릭한 뒤 TortoiseSVN → 로그 보기(L) 메뉴를 실행합니다. 파일을 선택하고 로그 보기(L) 메뉴를 실행하면 선택한 파일의 로그만 표시됩니다.


그림 2-52 TortoiseSVN 로그 보기 실행 방법

이 화면에서는 현재 체크아웃한 소스의 로그를 확인할 수 있으며 각 파일을 더블클릭하면 어떤 부분이 수정되었는지 표시됩니다.


그림 2-53 TortoiseSVN 로그 보기 실행 화면

수정된 부분 확인하기(Diff)

svn diff 명령은 작업을 하면서 수정된 부분이 어떤 부분인지 확인할 때 사용합니다. svn diff, svn di으로 사용합니다. svn di hello.c 처럼 특정 파일이나 디렉터리를 지정할 수 있고, 아무것도 지정하지 않으면 현재 디렉터리의 모든 변경 사항을 표시해 줍니다.

hello.c의 내용을 수정한 뒤 다음 명령을 실행합니다.

C:\Documents and Settings\xp\바탕 화면\sample>svn di
C:\Documents and Settings\xp\바탕 화면\sample>svn di hello.c

소스를 수정한 뒤, svn di 명령을 실행한 한 화면입니다. 추가된 부분은 +로 표시되고 삭제된 부분은 -로 표시됩니다.


그림 2-54 svn di 명령 실행 화면

TortoiseSVN에서는 비교(D) 메뉴를 사용합니다.


그림 2-55 TortoiseSVN 비교 실행 방법

비교 메뉴를 실행하면 TortoiseMerge가 실행되고 바뀐 부분을 표시해줍니다. 마찬가지로 추가된 부분은 +로 표시되고 삭제된 부분은 -로 표시됩니다.


그림 2-56 TortoiseMerge 실행 화면

수정된 것 되돌리기(Revert)

svn revert 명령은 소스를 수정했거나 추가, 삭제한 부분을 원래 상태로 되돌리고 싶을 때 사용합니다. 이 명령을 사용하면 마지막 커밋한 상태로 되돌아갑니다. svn revert hello.c처럼 특정 파일이나 디렉터리를 지정할 수 있고, 아무것도 지정하지 않으면 현재 디렉터리의 모든 변경 사항을 되돌립니다.

C:\Documents and Settings\xp\바탕 화면\sample>svn revert
C:\Documents and Settings\xp\바탕 화면\sample>svn revert hello.c

TortoiseSVN에서는 되돌리기 메뉴를 사용합니다. 바탕 화면의 sample 디렉터리에서 hello.c를 선택 뒤 TortoiseSVN → 되돌리기(V)... 메뉴를 실행합니다. 빈 공간에서 마우스 오른쪽 버튼을 클릭하여 되돌리기(V)... 메뉴를 실행하면 해당 디렉터리 아래에 모든 파일 및 디렉터리를 되돌릴 수 있습니다.


그림 2-57 TortoiseSVN 되돌리기 실행 방법

파일 하나만 선택하여 되돌리기 했다면 다음과 같은 화면이 나올 것입니다. 파일이나 디렉터리를 여러 개를 드래그하여 되돌리기할 경우 파일과 디렉터리가 여러 개 표시되며, 체크박스를 통해 되돌릴 것인지 되돌리지 않을 것인지를 지정할 수 있습니다.


그림 2-58 되돌릴 파일을 선택하는 화면

수정한 사람 보기(Blame)

svn blame 명령은 소스의 어느 부분을 누가 수정했는지 표시해 줍니다. svn blame hello.c 형식으로 파일을 지정해 주어야 합니다. -r 명령으로 리비전 구간을 지정하여 표시할 수 있습니다.

C:\Documents and Settings\xp\바탕 화면\sample>svn blame hello.c
C:\Documents and Settings\xp\바탕 화면\sample>svn blame hello.c -r 5:7


그림 2-59 svn blame 명령 실행 화면

각 줄에서 맨 앞의 숫자는 리비전이며 그 뒤에는 사용자명이 나옵니다. 예제에서는 sampleuser 밖에 없지만, 여러 사용자가 수정했을 경우 각 줄 별로 수정한 사용자가 표시됩니다. TortoiseSVN에서는 수정한 사람 보기 메뉴를 사용합니다. 바탕 화면의 sample 디렉터리에서 hello.c 파일을 선택하고 TortoiseSVN → 수정한 사람 보기(B)... 메뉴를 실행합니다.


그림 2-60 TortoiseSVN 수정한 사람 보기(blame) 실행 방법

-r 옵션과 같이 시작 리비전과 대상 리비전으로 구간을 지정할 수 있습니다.


그림 2-61 수정한 사람 보기(blame)의 리비전 설정 화면

명령 행(커맨드라인) 도구와 마찬가지로 각 줄 별로 리비전과 사용자(작성자)를 표시해 줍니다.


그림 2-62 TortoiseBlame 실행 화면

파일, 디렉터리 잠그기(Lock), 잠금 풀기(Unlock)

파일 및 디렉터리를 다른 사용자가 수정하지 못하게 하려면 svn lock 명령을 사용합니다. 잠금을 해제하려면 svn unlock 명령을 사용합니다. 잠금을 한 사용자만 잠금을 해제 할 수 있습니다.

C:\Documents and Settings\xp\바탕 화면\sample>svn lock hello.c
C:\Documents and Settings\xp\바탕 화면\sample>svn unlock hello.c

TortoiseSVN에서는 잠그기, 잠금 풀기 메뉴를 사용합니다. 바탕 화면에서 sample 디렉터리에 있는 hello.c 파일을 선택하고 TortoiseSVN → 잠그기(K)... 메뉴를 실행합니다.


그림 2-63 TortoiseSVN 잠그기 실행 방법

잠그는 이유를 작성하고 확인을 누르면 파일이 잠김니다.


그림 2-64 잠그는 이유를 입력하는 화면

그림 2-65 TortoiseSVN 잠금이 실행된 화면

잠긴 파일은 메뉴가 잠그기(K)...에서 잠금 풀기(K)로 바뀌며, 잠금 풀기(K) 메뉴를 실행하면 잠김이 풀립니다.


그림 2-66 TortoiseSVN 잠금 풀기 실행 방법

그림 2-67 TortoiseSVN 잠금 풀기 실행 화면

파일, 디렉터리 이름 바꾸기(Rename)

Subversion은 CVS와는 달리 svn rename 명령으로 파일 및 디렉터리의 이름을 바꿀 수 있습니다. svn rename (현재 파일, 디렉터리 이름) (바꿀 파일, 디렉터리 이름) 형식으로 사용합니다. svn rename 명령으로는 이름이 바로 바뀌지는 않고 svn commit 명령으로 커밋을 해주어야 완전히 바뀌게 됩니다.

C:\Documents and Settings\xp\바탕 화면\sample>svn rename hello.c world.c
C:\Documents and Settings\xp\바탕 화면\sample>svn commit

TortoiseSVN에서는 이름 바꾸기 메뉴를 사용합니다. 바탕 화면의 sample 디렉터리에서 hello.c 파일을 선택하고 TortoiseSVN → 이름 바꾸기(N)... 메뉴를 실행합니다.


그림 2-68 TortoiseSVN 이름 바꾸기 실행 방법

이름 바꾸기 대화상자가 나타나면 바꿀 이름을 입력하고 확인 버튼을 누릅니다. 이름을 바꾼 뒤 커밋해야 실제로 적용이 됩니다.


그림 2-69 새 이름을 입력하는 화면

그림 2-70 이름을 바꾼 뒤 커밋 로그 메시지를 입력하는 화면

소스만 가져오기(Export)

svn export 명령은 순수한 소스만 받아보고 싶을 때 사용합니다. 즉 소스 압축하여 외부에 전달하려고 할 때 주로 사용합니다. svn export로 받은 소스는 커밋이나 파일 추가, 삭제 동작을 할 수 없습니다.

C:\Documents and Settings\xp\바탕 화면>svn export svn://127.0.0.1/sample/trunk sample-export

sample 저장소의 trunk를 sample-export 디렉터리에 export 한다는 뜻입니다.

TortoiseSVN에서는 익스포트(X)... 메뉴를 사용합니다. 바탕 화면에서 TortoiseSVN → 익스포트(X)... 메뉴를 실행합니다.


그림 2-71 TortoiseSVN 익스포트 실행 방법

저장소 URL을 지정하고 익스포트할 디렉터리를 지정합니다. 체크아웃과 마찬가지로 바탕 화면만 지정할 경우 바탕 화면에 소스의 파일 및 디렉터리가 바로 생성되므로 주의하기 바랍니다.


그림 2-72 익스포트를 하기 위해 저장소 URL과 익스포트할 디렉터리를 지정하는 화면

브랜치(Branch)와 태그(Tag)

Subversion에서는 trunk 디렉터리에서 주 개발 작업을 진행합니다. 하지만, 실험적인 작업이나, 현재 버전은 유지 보수하고 현재 버전을 기반으로 차기 버전을 개발 할 경우 브랜치를 합니다. 태그는 현재 릴리스된 소스를 관리하기 쉽게 따로 보관하는데 사용합니다.

브랜치, 태그는 svn copy 명령을 사용하여 단순히 trunk 디렉터리를 branches, tags 디렉터리에 복사해주는 것에 불과합니다. CVS처럼 파일 하나 하나에 태그를 붙이는 방식이 아니라서, 속도가 매우 빠릅니다.

또한 Subversion에서 브랜치 태그를 한다고 해도 저장소의 용량이 2배 3배 늘어나지는 않습니다. 이유는 svn copy 명령은 실제로 소스를 복사하지 않고 저장소 내부적으로 링크를 거는 역할만 하기 때문입니다.

C:\Documents and Settings\xp\바탕 화면\sample>svn copy . svn://127.0.0.1/sample/branches/sample-branch
C:\Documents and Settings\xp\바탕 화면\sample>svn copy . svn://127.0.0.1/sample/tags/1.0

위 명령은 현재 디렉터리(trunk)를 branches 디렉터리 아래에 sample-branch, tags 디렉터리 아래에 1.0으로 복사합니다. 이후 svn://127.0.0.1/sample/branches/sample-branch에서 브랜치된 소스를 체크아웃한 뒤 개발을 하면 됩니다.

svn://127.0.0.1/sample/tags/1.0는 익스포트만 해야 하며, 체크아웃한 뒤 수정하여 커밋 할 경우 경고 메시지가 출력됩니다. 태그는 개발을 위한 것이 아니라 보관을 위한 것이기 때문입니다.

TortoiseSVN에서는 브랜치/태그 메뉴를 사용합니다. 바탕 화면의 sample 디렉터리에서 빈 공간을 마우스 오른쪽 버튼으로 클릭한 뒤 TortoiseSVN → 브랜치/태그(T)... 메뉴를 실행합니다.


그림 2-73 익스포트를 하기 위해 저장소 URL과 익스포트할 디렉터리를 지정하는 화면

현재 작업 중인 URL은 바탕 화면에 체크아웃한 sample 디렉터리입니다. 대상 URL에는 브랜치/태그할 URL을 지정해줍니다.


그림 2-74 브랜치 및 태그를 만들기 위해 대상 URL을 지정하고 로그 메시지를 입력하는 화면

브랜치(Branch)와 태그(Tag) 전환하기(Switch)

svn switch 명령은 하나의 작업 디렉터리를 두고 커밋이나 업데이트 하는 저장소 URL을 trunk, branches, tags로 전환하는 명령입니다. 브랜치, 태그를 전환할 때에도 쓰이지만, 평소 트렁크나 브랜치 아래에서 작업을 하고 있는데 서버의 IP 주소나 URL이 변경되었을 경우에도 사용합니다. svn switch 또는 svn sw로 사용합니다.

트렁크에서 브랜치로 전환

C:\Documents and Settings\xp\바탕 화면\sample>svn sw svn://127.0.0.1/sample/branches/sample-branch

저장소의 IP주소나 URL이 변경된 경우

C:\Documents and Settings\xp\바탕 화면\sample>svn switch --relocate svn://127.0.0.1/sample/trunk svn://192.168.0.100/sample/trunk

TortoiseSVN에서는 브랜치/태그 전환, 저장소 URL 변경 메뉴를 사용합니다. 바탕 화면의 sample 디렉터리에서 빈 공간을 마우스 오른쪽 버튼으로 클릭 한 뒤 TortoiseSVN → 브랜치/태그 전환(W)... 메뉴를 실행합니다.


그림 2-75 TortoiseSVN 브랜치/태그 전환 실행 방법

브랜치/태그로 전환입니다. trunk, branches, tags등의 저장소 URL을 지정할 수 있고, 특정 리비전으로 갈 수도 있습니다.


그림 2-76 다른 브랜치나 태그로 전환하기 위해 저장소 URL을 지정하는 화면

바탕 화면의 sample 디렉터리에서 빈 공간을 마우스 오른쪽 버튼으로 클릭 한 뒤 TortoiseSVN → 저장소 URL 변경(C) 메뉴를 실행합니다.


그림 2-77 TortoiseSVN 저장소 URL 변경 실행 방법

저장소 URL 변경(C) 메뉴로는 브랜치, 태그로 전환할 수 없고, IP 주소나 URL 만 변경할 수 있습니다.


그림 2-78 저장소의 URL을 변경하기 위해 대상 URL을 지정하는 화면

관리도구

svnadmin.exe를 사용하여 저장소를 백업하고 복구 할 수 있습니다.

저장소를 파일로 백업하기(Dump)

svnadmin dump 명령은 저장소를 하나의 파일로 백업합니다. svnadmin dump 저장소 > 파일명의 형식으로 사용합니다.

C:\Repos>svnadmin dump sample > sample.dump

파일을 저장소로 복원하기(Load)

svnadmin load 명령은 빈 저장소에 dump 파일을 이용하여 저장소를 복구할 때 사용합니다. svnadmin load 빈 저장소 < 파일명의 형식으로 사용합니다.

C:\Repos>svnadmin create sample2
C:\Repos>svnadmin load sample2 < sample.dump

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.