by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

Subversion 소개 및 사용법




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

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

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.