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

SVN에 대해서




SVN에 대하여 (Subversion)

1. 버전 관리 시스템의 필요성(이점)

  • 여러 명의 개발자들이 같은 코드 기반(code base)을 통제된 방식으로 다룰 수 있게된다.
  • 한 팀원이 수정한 코드를 다른 팀원이 덮어쓰게 되면 어쩌나 하는 걱정을 할 필요가 없다.
  • 시간의 진행에 따라 변경 내력을 유지할 수 있다.
  • 생소한 코드를 보게 되더라도 코드를 누가, 언제,왜 그렇게 고쳤는지 쉽게 알아낼 수 있다.
  • 주된 개발 흐름을 유지하면서도 여러개의 릴리스(Release)들을 만들어내는 것이 가능해진다.
  • 팀이 작업을 멈출 필요가 없어진다.
  • 개발자들이 백업을 하지 않아도 된다.

2. Subversion 이란?

  • 파일, 디렉터리를 버전관리하는 것.
  • 서브버전은 CVS의 단점을 극복하기 위해서 시작된 것이다.

2.1. SVN & CVS 비교

  • 커밋 단위가 파일이 아닌 체인지 셋이다.
    CVS에서는 여러개의 파일을 한꺼번에 Commit하더라도 각각의 파일들이 한꺼번에 리비전이 따로 붙지만
    SVN에서는 파일별 리비전이 없고 한번 커밋할때 마다 변경사항별로 리비전이 하니씩 증가한다.
  • 저장소/프로젝트별 환경 설정 가능
  • 확장성을 염두에 둔 구조, 깔끔한 소스

2.2. Subversion 용어

Repository(저장소) 모든 프로젝트의 프로그램 소스들이 이 저장소 안에 저장된다.
Check Out (체크아웃) 저장소에서 소스를 받아오는 것이다.
Commit(커밋) 개발자가 소스를 수정, 파일 추가, 삭제 등을 한 뒤 저장소에 갱신하는 것이다.
  커밋을 하면 CVS에서는 수정한 파일의 리비전 증가 SVN의 경우는 전체 리비전이 증가한다.
Update(업데이트) 체크아웃을 해서 소스를 받았더라도 다른 사람이 커밋을 하면 소스가 수정되어 있다.
  업데이트를 하여 저장소에 있는 최신 버전의 소스를 가져온다. 바뀐 부분만 받는다.
Revision(리비전) 소스 파일을 수정하여 커밋하면 일정한 규칙에 의해 숫자가 증가한다.
Import (임포트) 아무것도 들어있지 않은 저장소에 맨 처음 소스를 넣는 작업이다.
Export (익스포트) 버전 관리 파일들을 뺀 순수한 소스 파일을 받아올 수 있습니다. 오픈소스 프로젝트의 경우 소스를 압축하여 릴리즈 할 때 사용한다.
Tag(태그) 꼬리표라고 파일 또는 프로젝트에 기억하기 쉬운 이름을 부여하는 기능.
Branch(브랜치) 나무줄기(trunk)에서 뻗어져 나온 나무 가지를 뜻함.
  trunk 디렉토리에서 프로그램을 개발하다 보면 큰 프로젝트에서 또 다른 작은 분류로 빼서 따로 개발해야 할 경우가 생긴다.
Trunk(가지) 프로젝트에서 가장 중심이 되는 디렉터리이다.
  소스파일과 디렉터리가 들어간다.
Merge(머지) 브랜치, 가지 둘 다 수정할 경우 브랜치 수정분을 가지에 병합하는것이다.

2.3. 저장소의 디렉터리 구조 (배치구조)

svn-repos
    |
    +--sesame
            |
            +--branches
            |      |
            |      +--src
            |
            +--tags
            |     |
            |     +--0.0
            |      
            +--trunk
                  |
                  +--doc
            

3. Subversion 설치

4. 로컬 PC에서 테스트

폴더명칭

  • 저장소 : C:/svn-repos
  • 프로젝트명 : sesame
  • 임시디렉터리 : tmpdir
  • 작업폴더명 : work

저장소 만들기

C:\>mkdir c:\svn-repos
C:\>svnadmin create c:\svn-repos

프로젝트 만들기

C:\tmpdir>svn import -m "importing sesame project " . file:///c:/svn-repos/sesame/trunk

작업폴더 만들기

C:\>mkdir c:\work

작업폴더에 저장소 프로젝트 체크아웃(내려받기) _ 사용자1 폴더

C:\work>svn co file:///c:/svn-repos/sesame/trunk sesame

Day.txt에 값을 추가하여 서브버전이 그 변화를 알아채고 있는지 확인해 보자

C:\work\sesame>svn status Day.txt

변경된 내용을 저장소에 commit한다.

C:\work\sesame> svn commit -m "Client wants us to work on weekends"

로그보기

C:\work\sesame> svn log --verbose Day.txt

작업폴더에 저장소 프로젝트 체크아웃(내려받기) _ 사용자2 폴더

C:\work>svn co file:///c:/svn-repos/sesame/trunk aladdin

sesame 디렉터리에서 Number.txt (five 와 six) 추가하고 체크인

C:\sesame>svn commit -m "Customer wants more numbers"

aladdin에서 상태 확인하기

C:\aladdin>svn status --show-updates

버전 차이 보기

C:\aladdin>svn diff -rHEAD Number.txt

aladdin 복사본을 갱신(병합)한다.

C:\aladdin>svn update

두 사람이 같은 파일을 각자 변경한 상황

– aladdin 의 Number.txt 을 SIX 로 수정
– sesame 의 Number.txt 을 ZERO 로 수정

C:\aladdin>svn commit -m "Make 'siz' important"
C:\sesame>svn commit -m "Zero is changing"
C:\sesame>svn update
C:\sesame>svn commit -m "Zero is changing"
C:\aladdin>svn update

G는 병합했음을 뜻함
U는 그냥 덮어썼을 때

5. 네트웍 프로토콜 (클라이언트에서 저장소 접근하기)

  • 1.svn 프로토콜
  • 2.svn-ssh
  • 3.http ( 아파치 웹 서버를 이용)

5.1 SVN을 이용한 Branche 만들기

-- 서버 시작

c:\>start svnserve --daemon --root c:\svn-repos
참고1. 인증실패라고 나올 경우
  • c:\svn-repos\conf\svnserve.conf를 수정
    [WEBSTUDY: general]
    anon-access = read #익명사용자 접근 허용
    auth-access = write #인증된 사용자들에게 읽기/쓰기 접근 허용
    password-db= passwd #사용자 이름/비밀번호 정보가 passwd라는 파일에 있다는 뜻

-- 디렉터리 만들기
C:\work>svn mkdir -m " Creating branches directrocd ry" svn://74be304f5aa14f4./sesame/branches

-- 만든 디렉터리에 새로운 branche 복사
C:\work>svn copy -m "Creating release branch for 1-0" svn://74be304f5aa14f4./sesame/trunk svn://74be304f5aa14f4./sesame/branches/RB-1.0

-- Branche에서 꺼내오기
C:\work>svn co svn://74be304f5aa14f4./sesame/branches/RB-1.0 rb1.0

-- 기존 작업본을 Branche로 전환
C:\ssame>svn switch svn://74be304f5aa14f4./sesame/branches/RB-1.0

-- 작업본을 다시 trunk로 전환
C:\sesame>svn switch svn://74be304f5aa14f4./sesame/trunk

5.2 SVN을 이용한 Tag 생성


-- tags 디렉터리 만들고 그 아래에 릴리스 가지 디렉터리를 복사한다.

C:\work>svn mkdir -m "Creating tags Directory" svn://74be304f5aa14f4./sesame/tags

C:\work>svn copy -m "Tag release 1.0.0" svn://74be304f5aa14f4./sesame/branches/RB-1.0 svn://74be304f5aa14f4./sesame/tags/REL-1.0.0

-- 새로운 작업본으로 꺼내온다.
C:\work>svn checkout svn://74be304f5aa14f4./sesame/tags/REL-1.0.0  client-fix

-- common을 가리키도록 전환

C:\work>cd client-fix
C:\client-fix>svn switch svn://74be304f5aa14f4./sesame/branches/RB-1.0/common common

5.3 Http (아파치 웹 서버를 이용)

  • svn 프로그램 설치 되어 있는 D:\subverion\bin\libdb44.dll
    -> C:\Program Files\Apache Group\Apache2\bin 복사
  • D:\subverion\bin\mod_authz_svn.so, mod_dav_svn.so
    -> C:\Program Files\Apache Group\Apache2\modules 복사
  • C:\Program Files\Apache Group\Apache2\conf\http.conf 아래 내용 추가
<Location /svn-repos>
	DAV svn
	SVNPath C:\svn-repos
</Location>
  • http.conf에 다음주석 표시제거
    LoadModule dav_module modules/mod_dav.so

6. 이클립스에서 저장소 접근하기

  • 이클립스에서 테스트 하기

문서에 대하여

문서정보

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