-------------------------------------------------------------------------
출처: http://imjuni.springnote.com/pages/487626
-------------------------------------------------------------------------
Subversion
Subversion은 버전관리 도구이다. CVS 단점을 개선하고, 대체하기 위해서 개발되었다. 최근에 SVN을 사용하여 프로젝트를 관리하는 팀이 늘어나고 있으며 Trac와 같은 웹을 통한 관리도구 등이 선보이고 있다. 이러한 버전 관리 시스템은 사실상 혼자서 프로젝트를 진행하는 경우 문서 작업을 잘 한다면 필요 없다. 하지만 공동 작업을 하게 될 경우에는 필수적이라고 볼 수 있는데, 그 이유는 다음과 같다[1].
- 개발 버전과 릴리즈 버전이 섞이지 않고 관리가 용이하다.
-
소스를 잘 못 수정해도 기록이 남고 되돌리기 쉽다.
- 파일이 많아 질 경우 일일히 수정사항을 남기는 것이 힘들고 특정 시점으로 되돌리는 것 또한 힘들다.
- 사용자가 많아질 경우 서로 수정한 부분에 대해서 알기 힘들다.
- 수정, 추가, 삭제 등의 작업에도 기록이 남고 변경 사항을 추적하기 쉽다.
- 개발자들이 따로 백업을 하지 않아도 된다.
본 문서는 Subversion을 관리자적인 입장에서 접근한다. Subversion을 설치하고 관리하는 방법, 프로젝트를 개설하고 개별 계정에 권한을 설정하는 방법과 더불어 실제로 Subversion을 사용하는 방법등을 서술한다.
본 문서는 PYRASIS에서 작성한 Subversion 사용 HOWTO를 기초로하여 작성되었다.
Using System
본 문서에서 사용한 시스템은 다음과 같다.
Require | Using System |
---|---|
Operating System | Debian ETCH 4.0 (Linux kernel 2.6.18) |
Web Server | Apache2 2.2.3-4 for Debian |
Database | Berkely DB 4.4 for Debian |
Subversion | Subversion 1.4.2 for Debian |
SSH Server | OpenSSH 1:4.3 for Debian |
모든 패키지를 apt를 사용하여 자동 설치 하였다. 특히 Subversion을 설치할 경우 자동으로 Berkeley DB와 필수 패키지를 설치한다. 이외에 추가적으로 사용할 패키지가 있다면 apt를 사용하여 설치하면 된다. 소스 컴파일은 되도록 권장하지 않는다. 소스 컴파일은 의존성과 각종 패키지간 관계에 있어서 불완전 요소를 만들어 내기 때문에 되도록 apt를 사용하도록 한다(이를 테면, 호환이 잘 되지 않아 시스템 크러쉬를 유발할 수 있다).
Version control tools Terminology
-
Repository
- 모든 프로젝트의 소스가 저장된다. 또한 각종 소스 변경사항도 저장된다. 네트워크를 통해서 여러 사람이 접근할 수 있어야 한다. Version control tool마다 사용하는 file system이 틀리며, Subversion은 berkely DB와 file system을 이용한다.
-
Checkout
- Repository에서 소스를 받아온다. Subversion은 소스와 함께 version contorl을 위한 추가 디렉토리를 함께 다운로드 한다. 이 디렉토리는 임의로 변경하거나 삭제하면 안된다. 만약 삭제하거나 변경하면 Repository와 연결이 안된다.
-
Commit
- Checkout한 소스를 수정, 파일추가, 삭제 등 소스를 변경한뒤 Repository에 저장하여 갱신한다. Subversion은 전체 Revision이 1 증가한다.
-
Update
- Checkout한 소스를 가져왔더라도 다른 사람이 commit을 해서 소스가 달라졌을 수 있따. 이 때 update를 하여 Repository에서 새로운 소스를 다운로드하며 달라진 부분만 다운로드한다.
-
Revision
- 소스파일을 수정하여 commit하게 되면 일정한 규칙에 의해서 숫자가 증가한다. 저장소에 저장된 각각의 파일 버전이라 할 수 있다. 이 Revision을 이용하여 프로젝트 진행상황을 파악할 수 있다.
-
Import!
- Repository에 최초 소스파일을 등록하는 작업을 뜻한다.
-
Export
- checkout는 소스파일과 버전관리를 위한 파일이 다운로드된다. 버전관리 파일을 제외하고 순수하게 소스코드를 받아 오는 작업을 말한다.
Subversion Installation
Subversion은 다양한 추가적인 패키지를 사용한다. Berkely DB, SSH, Apache2 등을 사용한다. APT를 사용하면 설치는 어렵지 않다. Subversion은 File System을 사용하여 프로젝트를 관리할 수 있지만 되도록 Berkeley DB를 설치하여 DB를 사용하여 프로젝트를 관리하도록 한다.
sh> apt-get install subversion |
Subversion Setting
Subversion을 사용하기 위해서는 Repository를 설정하고, 그에 해당하는 계정 및 그룹설정을 하고, Subversion이 사용하는 각종 디렉토리를 생성하는 등 여러 단계
를 거쳐야 한다. 자세한 순서는 아래와 같다.
Protocol
프로젝트를 관리하기 위해서 checkout 및 commit 등 네트워크 작업이 빈번하게 발생한다. 이 경우 어떤 프로토콜을 사용할 것인지가 중요해진다. 뿐만 아니라 Subversion은 프로토콜 선택에 따라 Authorization 방법이 틀려진다.
-
Apache2
- Apache2를 사용하여 Authorization을 담당하고, Web를 통한 Repository 접근 등이 가능하다.
-
svnserve
- Subversion 고유 프로토콜이며 0.33.0버전 이후부터 자체적 ID로 사용자 인증이 가능하다.
-
svn+ssh
- ssh를 사용하여 system account를 따른다.
설정복잡도는 Apache2 > svnserve > svn+ssh 순이며 범용성은 Apache2 > svnserve > svn+ssh 이다. 프로젝트의 성격과 참여 인원을 고려하여 자신에게 적합한 프로토콜을 선택한다.
svnserve
본문서가 채택한 방법이다. 크게 복잡한 설정 없이 사용할 수 있으며 System account와 다른 계정 시스템을 사용한다. Apache2를 사용한 것 보다 checkout, commit 속도가 더 빠르며 사용자 인증이 가능하다.
sh> svnserve -d -r [repositorydir] |
Subversion 0.33 이후 버전에서는 ID를 통해 인증이 가능하게 되었다. 0.33버전 이후 부터 생성한 프로젝트 하위 디렉토리로 conf 디렉토리가 생성된다. 이 conf 디렉토리에 있는 svnserve.conf 파일을 에서 다음 부분을 수정하면 된다.
option | value | mean |
---|---|---|
anon-access | write/read/none | 인증과정 없이 Repository에 접근하는 계정에 대한 권한 여부 |
auth-access | write | 인증된 사용자에 대한 Repository 권한 |
password-db | passwd | svnserve 패스워드 파일 |
realm | [Your Repository Name] | Repository 별칭 |
패스워드와 유저 계정은 conf 디렉토리에 있는 passwd 파일을 수정한다. [users] 아래, [username]=[password] 형태로 수정한다.
SSH+svnserve
프로젝트 참여 인원이 많지 않고 모두가 SSH를 사용할 수 있는 System account를 소유하고 있을 때 적합한 방법이다. 설정이 쉽고 간편하게 사용할 수 있다.
Subversion usage
Subversion은 CVS와 사용법이 유사하다. 아래는 기본적인 사용법을 다룬다.
Subversion Editor
Subversion은 사용자가 Commit, Checkout 등 어떤 작업을 수행할 때마다 로그파일을 생성한다. 이 로그파일은 SVN_EDITOR에 등록된 에디터를 대상으로 이루어진다. 사용자 설정파일(.bashrc)을 열어 다음 환경변수를 추가한다.
SVN_EDITOR=[YourEditor] export SVN_EDITOR
example SVN_EDITOR=/usr/bin/vim export SVN_EDITOR |
Create Repository
모든 프로젝트를 수행하기 위해서는 Repository를 생성해야 한다. Repository를 생성할 때는 신중하게 고려해야 한다. 특히 Trac와 연동하기를 원할 때에는 www-data계정과 Repository 생성 계정간 그룹을 염두에 두어야 하며, svn+ssh를 사용할 경우 다른 개발자가 Repository에 접근할 수 있도록 그룹권한을 설정해야 한다. 또한 file system으로 Berkely DB를 사용할 것인지 file system을 이용할 것인지를 결정할 수 있다. 이런 사항에 대한 고려가 끝났다면 다음과 같이 Repository를 만든다.
use Berkeley DB |
sh> cd /home/svn/ svnadmin create --fs-type bdb [repositoryname] |
---|---|
use file system |
sh> cd /home/[repositoryname]/ svnadmin create --fs-type fsfs [repositoryname] |
공동 작업을 위해서 아래 명령어를 사용하여 그룹쓰기 권한을 추가할 수 있다.
sh>chmod -R g+w [TargetDir] |
trunk directory creation
trunk는 소스관리를 위한 기본 디렉토리이다. trunk 디렉토리 생성법은 아래와 같다.
sh>svn mkdir [YourProtocol]://[SVNServerAddress][ProjectDir]/trunk
example sh>svn mkdir svn://198.0.0.2/svn/sample/trunk |
Source code Import!
최초 소스코드를 import!하는 방법은 아래와 같다.
sh>svn import! [SourceCodedir] [YourProtocol]://[SVNServerAddress]
example sh>svn import! svn://198.0.0.2/svn/sample/trunk |
Subversion - Error Handling
이 부분에서는 Subversion이 일으키는 문제를 서술하고 그것을 해결하는 방법을 기술한다.
Visual Studio Error handling - Remain Handling
Visual Studio에서는 *.plg 파일을 사용한다. 이 파일은 프로젝트 경로설정과 관련된 파일로, 공동 작업이 이루어지는 Subversion에서는 크게 필요하지 않다. 뿐만 아니라 이 파일이 있으면 Subversion에서는 경로를 합치려고 시도하고, 이에 따라 Reamins in conflict 에러가 발생한다. 이 경우 가장 간단하게 해결하는 방법은 Repository에서 *.plg 파일을 삭제하는 것이다. 이렇게 하면 추후 commit 과정에서 필요 없는 파일로 인식하게 되고 commit하지 않게 되어 문제가 해결된다.
Tortoise SVN
HP: http://tortoisesvn.tigris.org/
Tortoise SVN은 Win32 환경에서 Suvbersion을 사용하기 편하도록 GUI interface를 제공하는 프로그램이다. 또한, Win32 Port Subversion을 사용하지 않더라도 간편하게 사용할 수 있어 유용한 프로그램이다. 대부분의 사용법은 Command-Line 기반 Subversion과 동일하며, 이러한 사용방법은 UI로 제공된다. Tortoise SVN의 다른 기능은 KLDP Wiki에서 확인 할 수 있다. 특히 file:///[path]를 몰라서 엄청 헤메었는데 KLDP에서 한방에 해결 했다.
TroubleShooting
-
Berkeley DB Problem
Multi-user env에서 Subversion을 쓰는 경우 (특히 svn+ssh, 본인의 경우에는 svn+trac)에는 Berkeley DB가 아주 불안정하다고 한다. 다음과 같은 오류 메시지를 출력하며 이 경우에는 Berkeley DB를 복구하고 Subversion Repository를 복구해야 한다. 하지만, 이렇게 하였을 경우에도 복구가 되지 않을 때에는 fsfs로 migration해야지만 정상적으로 이용할 수 있다.svn: Berkeley DB error while opening environment for filesystem /home/svn/.../db:
DB_RUNRECOVERY: Fatal error, run database recovery
svn: bdb: PANIC: fatal region error detected; run recovery1.1 Recovery
sh> db_recover [svn_repository_path] # Debian과 같은 배포버전은 db[version]_recover 명령어로 존재한다. 예를 들면, db4.4_recover와 같다.
sh> svnadmin recover [svn_repository_path]2.2 Migration
sh> svnadmin dump [old_svn_repository_path] > [backup_filename]
sh> svnadmin creage --fs-type fsfs [new_svn_repository_path]
sh> svnadmin load [new_svn_repository_path] < [backup_filename]
# Subversion만 사용하는 경우에는 mv 명령어를 사용하여 [new_svn_repository_path]를 [old_svn_repository_path]로 바꾸어 주면 된다.
# Trac와 같은 도구를 사용하는 경우에는 Trac도 Migration해야 한다.reference: Todd's Blog, Subversion TroubleShooting
Reference
[1] PYRASIS.COM Subversion 사용 HOWTO - http://www.pyrasis.com/main/Subversion-HOWTO#s-5.1
[2] Subversion Homepage - http://subversion.tigris.org
[3] Official Subversion Manual - http://svnbook.red-bean.com/en/1.1/index.html
[3] KLDP Subversion Document - http://wiki.kldp.org/wiki.php/Subversion
'IT_Programming > Dev Tools' 카테고리의 다른 글
[펌] .NET 문서화를 자동으로, XML 문서 주석 (0) | 2010.10.04 |
---|---|
[펌] jstack 그리고 jconsole - JVM Stack Trace 얻기 (0) | 2010.08.26 |
이클립스 디버깅 1 (0) | 2010.01.18 |
Some VS2005 and VS2008 Wizards Pop Up Script Error (0) | 2010.01.12 |
[펌] 비주얼 스튜디오 2008 (9.0) + 에디트플러스 연동 방법 (0) | 2009.07.01 |