- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=26739556&
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.
Subversion 소개 및 사용법
1. Subversion 소개
1.1 버전관리 시스템
- 파일의 변경 이력을 관리하는 시스템으로 소스코드나 문서 파일의 수정 이력을 보관하고 관리한다.
- 여러 개발자가 동시에 많은 파일을 변경하더라도 덮어 쓰거나 충돌하는 문제를 방지할 수 있어야 한다.
- 다른 버전(Branch)으로 개발된 소스를 현재 소스와 합치고, 변경 이력에 대해서도 추적이 가능하다.
- 버전관리 시스템은 코딩작업 중 예상하지 못한 문제를 방지할 수 있으며, 소스코드의 변경 이력 추적이 가능하고, 동시에 다양한 버전의 개발 작업이 가능하다.
- 버전관리스시스템의 종류로는 CVS(Concurrent Version System), Visual SourceSafe, SVN(Subversion)
그리고 최근 각광받는 GIT(분산 버전관리시스템: Distributed Version Control Systems : DVCS) 이 있다.
1.2 Subversion이란
- Open Source 버전관리 시스템으로 2000년도에 CSV를 대체하기 위해 개발되었다.
- 파일 및 디렉토리의 버전관리 기능을 제공하며, 버전의 파일트리는 한 곳에 집중된 리파지터리에서 관리된다.
- Subversion은 효율적인 Branch및 Merge기능과 작업의 무결성을 보장한다.
- 네트워크 기능 지원(http) 및 크로스 플랫폼 (Windows, Mac, Linux) 을 지원한다.
2. Subversion 설치
2.1 윈도우 설치
2.2 리눅스 설치
설치작업
- 기본적으로 CentOS에서 설치해주는 SVN 사용
- yum install subversion
- 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 설정
- svnserve.conf 설정
/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
- TortoiseSVN
- http://tortoisesvn.net/downloads
- 가장 많이 사용하는 client 프로그램, 윈도우 버전 제공
- Subclips
- http://subclipse.tigris.org/install.html
- 이클립스에서 사용 가능한 Plugin
- Subversive SVN Team Provider
- http://download.eclipse.org/technology/subversive/1.0/update-site/
- 이클립스 기본 Subversion Plugin
3. Subversion 용어 및 주요 명령어
3.1 주요 용어
Revision (버전)
- Revision은 저장소내 모든 변경 기록의 Unique한 아이디이다.
- Revision은 변경이 발생했을 때마다 증가하며, 삭제할 수 없다.
- Revision은 0부터 1씩 증가한다.
- Revision은 Merge와 Branches작업을 할 때 버전의 기준이 된다.
Comment (주석)
- 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되는 것이 일반적이다.
4.3 tags 폴더
- 특정 시점의 소스(trunk, branches)를 보관(snapshot)하기 위해 사용하는 폴더
- 보통 Release 버전 관리를 위해 많이 사용 함
- 프로그램을 개발하면서 정기적으로 릴리즈 할 때 0.1, 0.2, 1.0 식의 버전의 소스를 따로 저장하는 공간
- 한 번 만들면 수정하지 않음
![]() |
Reference
문서정보
- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=26739556&
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.