본문 바로가기
Dev Career/SVN

<2021.6.10>SVN이란?

by 꿀방구 2021. 6. 10.

SVN(Subversion)

:여러명이 작업하는 프로젝트의 버전관리나 각자 만든 소스의 통합과 같은 문제를 해결하기 위해 저장소를 만들어 그곳에 소스를 저장하여  소스중복 or 여러 문제를 해결하기 위한  형상관리/소스 관리 툴

 

프로젝트 소스는 SVN 서버의 Trunk에 위치 하며 자신의 Local저장소에 Trunk의 소스를 Update 받아 수정 및 추가 한 후 다시 Commit 하는 방식으로 관리한다 

 

다른 개발자와 따로 작업시에는 Branch를 만들어 각자 자신만 접근하여 작업하며 완성시에  Merge기능을 사용하여 Trunk 와 소스를 합치면 된다 .

 

A:Commit 한 후  B:Update 하게 된다면 B는 A가 Commit 한 최신 소스를 받아 올 수 있게 된다. 


SVN(Subversion)의 사용 목적

소스를 version 별로 사용할 수 있어 실수로 소스를 삭제하거나, 수정전으로 rollback하는 경우 유용하게 사용한다. 

  1. Revision 별로 파일 백업이 가능 하다 .(파일복원,수정등이 가능)
  2. 개발버전과 배포 버전의 관리가 용이하다(소스의 버전관리 가능)
  3. 파일명 변경, 이동 ,디렉토리의 버전관리등도 가능하다.
  4. 여러사용자가 동시에 커밋을 해도 충돌이 발생하지 않는다.
  5. commit할때 마다 revision 이 올라가고 자동 로그가 생성되므로  commit별 확인이 용이하다. 
  6. 서버와 클라이언트 양방향 데이터 전송으로 네트워크 소통량이 최소화된다. 
  7. 접근이 허용된다면 누구든 쉽게 수정이 가능하다. 

SVN 용어

Repository

프로젝트 파일 및 변경 정보가 저장되는 장소

프로젝트 마다 하나의 저장소가 필요하며 , 네트워크를 통해 여러 사람이 접근 할 수 있고, 

소스뿐 아니라 소스의 변경 사항도 모두 저장된다. 

 

Trunk

프로젝트에서 가장 중심이 되는 디렉토리로, 개발소스를 Commit 했을 때 개발 소스가 모이는 장소이다. 

모든 개발 작업은 Trunk디렉토리에서 이루어지며, Trunk 디렉토리 아래에는 바로 솟들의 파일과 디렉토리가 들어가게 된다. 

 

Branch

Trunk에서 뻗어져 나온 나뭇가지를 뜻하며, 프로젝트 내의 작은 프로젝트 개념이 된다. 

Trunk 디렉토리에서 개발하다 보면 큰 프로젝트의 일부분을  따로 개발 해야 하는 경우가 생기는데 , 이때 branches디렉토리안에 또 다른 디렉토리를 두어 그안에서 개발 하게 된다. 

Branch는  버전별 배포판을 생성 또는 Trunk와 별도의 운영환경을 위한 소스관리 목적으로 사용된다. 

 

Tag

tag 버전별로 소스코드를 따로 관리 하는 공간이다 

 

Rivision

수정되었음을 표시하며 클라이언트가 Repository에 새로운 파일 , 수정 등을 commit할때마다 번호가 증가한다 

 

Head

Repository에 저장된 최신 revision 을 의미 한다. 

가장 최근에 commit된 revision이다 . 

 

Base

클라이언트가 checkout,update등의 명령을 통해 Repository로 부터 내려 받은 revision을 의미 한다.

 

만약 A가 update한 후 소스 작업중에 B가 commit을 하게 되면  Head에 저장된 revision은 A의 Base revision보다 증가하게 된다. 따라서 Head와 Base의 Revision이 다르게 되고 이때는 update를 먼저 수행하여야 commit이 가능해 진다. 

 


명령어

Import

처음 프로젝트 시작할때  Repository 에 맨 처음 파일들을 저장소에 등록하는 명령어이다 

svn import [PATH] URL

 

Checkout

저장소에서 소스를 가져오는 명령어로 받은 소스에는 소스와 버전관리를 위한 파일도 같이 받아 온다 

 

svn checkout(co) URL [PATH]

 

Export 

버전관리 정보가 없는 깨끗한 사본을 받아옴

svn export [-r REV] URL [PATH]

 

 

Update 

Working Copy를 Repository의 최신 내용으로 바꿈

svn update(up) [PATH]

Commit

변경된 내용을 Working Copy에서 Repository로 전송

svn commit(ci)

Add 

파일과 디렉토리를 Version Control에 넣음

svn add [PATH]

Log 

Repository의 변경사항을 확인

svn log [PATH] svn log URL

Diff 

두 Revision상의 차이점을 출력

svn diff -r N[:M] [TARGET]

Lock 

Working Copy 나 Repository를 잠굼

svn lock TARGET

unLock 

Working Copy 나 Repository의 Lock을 해제

svn unlock TARGET

Revert 

commit을 하기 전 Working Copy의 상태로 복원

svn revert PATH

Cleanup

Working copy의 디렉토리 잠금 삭제or 중단된 작업 수행

svn cleanup [WCPATH]

Status 

Working copy의 파일과 디렉토리 상태를 출력

svn status [PATH]

Relocate 

서버의 주소가 변경 되었을 때 사용

svn relocate OLD_URL NEW_URL

Switch 

서버내의 다른 브랜치나 태그로 변경할 때 사용

svn switch --relocate 는 svn relocate와 같다.

svn switch [URL] [BRANCH URL]

Upgrade 

Working copy에 메타데이터 Storage 포맷을 업그레이드함

svn upgrade [WCPATH]

Copy 

파일과 디렉토리를 복사하는 명령어이다. svn에서 branch와 tag를 만들 때 특별한 명령어를 쓰는것이 아니라 그냥 Copy 명령어로 trunk를 복사하는 것이다. trunk나 branch, tag는 개념적으로 구분을 하는 것을 뿐

 

Branch 

소스를 따로 분리하여 작업을 할 때 사용

svn copy [URL] [BRANCH URL]

Tag 

릴리즈하는 버전별 디렉토리를 만들어 사용

svn copy [URL] [TAG URL]