Subversion 소개 및 사용법
1. Subversion 소개
1.1 버전관리 시스템
1.2 Subversion이란
- Open Source 버전관리 시스템으로 2000년도에 CSV를 대체하기 위해 개발되었다.
- 파일 및 디렉토리의 버전관리 기능을 제공하며, 버전의 파일트리는 한 곳에 집중된 리파지터리에서 관리된다.
- Subversion은 효율적인 Branch및 Merge기능과 작업의 무결성을 보장한다.
- 네트워크 기능 지원(http) 및 크로스 플랫폼 (Windows, Mac, Linux) 을 지원한다.
2. Subversion 설치
2.1 윈도우 설치
2.2 리눅스 설치
설치작업
- 기본적으로 CentOS에서 설치해주는 SVN 사용
- svn --version
- svn, 버젼 1.6.11 (r934486) 사용
리파지토리 생성
- study 리파지토리 생성
- bdb 타입 : 지원하지 않는 클라이언트 있음, 거의 사용하지 않음
- fsfs 타입 : 관리하기에 빠르고 쉬움, 일반적으로 사용
cd /home
mkdir reps
#리파지토리 생성
svnadmin create --fs-type fsfs /home/reps/study
#SVN start
svnserve -d -r /reps
Subversion 설정
/reps/study/conf/svnserve.conf
[general]
anon-access=none
auth-access=write
password-db=passwd
#authz-db=authz
realm=Study Repository
/reps/study/conf/passwd
[users]
test=xxxxx
iptables 편집
- svn은 기본적으로 3690 포트를 사용 한다.
- iptables에 아래 내용을 추가해주고 저장 한다.
/etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
#iptables 재시작
/etc/rc.d/init.d/iptables save
/etc/rc.d/init.d/iptables restart
#프로세스 확인
ps -aux | grep svnserv
#포트 확인
netstat -ant | grep 3690
2.3 Subversion Client
- Subversive SVN Team Provider
3. Subversion 용어 및 주요 명령어
3.1 주요 용어
Revision (버전)
- Revision은 저장소내 모든 변경 기록의 Unique한 아이디이다.
- Revision은 변경이 발생했을 때마다 증가하며, 삭제할 수 없다.
- Revision은 0부터 1씩 증가한다.
- Revision은 Merge와 Branches작업을 할 때 버전의 기준이 된다.
- Repository에 Add, Commit, Delete 작업을 할 때 Comment를 기록해야 한다.
- Comment는 작업을 수행한 내용에 대해서 상세히 기록하여 다른 사람이 어떤 작업을 했는지 쉽게 파악할 수 있어야 한다.
- Comment 작업은 습관화 해서 꼭 기록하도록 하자
3.1 주요 명령어
Checkout
- Repository에서 Local PC로 소스를 다운로드 하는 작업
- 버전관리를 위한 meta 파일(.svn)도 같이 생성 됨
- Revision을 지정하여 특정 시점의 파일들을 다운로드 할 수 있다.
Export
- Checkout과 비슷하지만 순수 파일만 Local PC로 다운로드 하고, meta 파일은 생성하지 않는다.
- 즉 버전관리를 하지 않고 파일만 다운 받는다.
- 반대기능으로는 Import가 있음
Commit
- Local 파일의 변경(수정, 추가, 삭제)을 Repository에 저장한다.
- 작업이 정상적으로 완료 되면 Revision이 증가한다.
- 작업 전에는 반드시 Update 명령을 수행하여 Repository의 변경 여부를 확인해야 한다.
Update
- Local의 파일을 Repository와 비교하여 최신 버전의 상태로 갱신한다.
- Repository와 Local에서 동시에 변경된 경우 Local 파일을 자동으로 Merge 하지만, Merge 실패치 충돌(Conflict) 상태로 변경될 수 있다.
Delete
- 파일이나 폴더를 Local 에서 삭제하는 작업이다.
- Add 명령어와 마찬가지로 반드시 Commit 명령을 수행 해야지만 Repository에서 최종 삭제된다.
Copy (Branch, Tag)
- 작업중인 Local 폴더(대부분 trunk)를 선택하여 Copy명령으로 Branch나 Tag를 생성한다.
4. Subversion 저장소 디렉토리
4.1 trunk 폴더
- 현재 개발중인 안정화된 버전의 소스가 보관되는 폴더
- 보통 trunk의 소스를 dev branches로 생성하여 개발 작업 진행 후 QA 완료 후 배포되기 전에 trunk와 merge작업을 진행한다.
- trunk는 항상 안정된 버전의 소스가 보관되어야 한다.
4.2 branches 폴더
- 특정 시점의 소스(trunk, tags)로 개발을 진행할 때 사용하는 폴더
- 작업자, 작업시점에 따라 다양한 branches가 생성될 수 있다.(dev-, RB-)
- 수정이 계속해서 발생하다가 궁극적으로 trunk에 merge되는 것이 일반적이다.
- 특정 시점의 소스(trunk, branches)를 보관(snapshot)하기 위해 사용하는 폴더
- 보통 Release 버전 관리를 위해 많이 사용 함
- 프로그램을 개발하면서 정기적으로 릴리즈 할 때 0.1, 0.2, 1.0 식의 버전의 소스를 따로 저장하는 공간
- 한 번 만들면 수정하지 않음
Reference