2017년 1월 16일 월요일

[형상관리] SVN이란

* SVN이란?

 서브버전(Subversion)은 자유 소프트웨어 버전 관리 시스템이다. 명령행 인터페이스에서 사용하는 명령어를 따서 “SVN”이라고 줄여서 부릅니다.

SVN을 사용하여, 소스 파일과 문서의 이력을 기록할 수 있습니다.

이것은 시간에 걸쳐 파일과 디렉토리를 관리 합니다.

이와 같은 파일의 트리는 저장소(repository)에 놓여 집니다. 저장소는 보통의 파일 서버와 비슷하지만, 이제껏 만들어진 파일과 디렉토리의 모든 변경을 기억하고 있습니다.





- 기능

·  더 이상 나누어 질 수 없는 개별적으로 쓰기를 지원하므로, 쓰기 도중 중단으로 인한 저장소 내의 불일치나 손상을 피할 수 있다.

· 이름을 바꾸거나, 복사하거나, 파일을 지워도 계정 기록을 유지한다.

· 시스템이 디렉토리, 파일 이름 바꾸기, 파일 메타데이터에 대해서도 판본 호수를 지정 관리한다. 사용자는 디렉터리 전체를 빠르게 옮기거나 복사하면서도 전체의 개정 이력을 보유할 수 있다.

· 심볼릭 링크도 판본 호수를 지정.(*심볼릭 링크: #>in –s ..test/test testtest =>현재 위치에 testtest라는 폴더를 생성하고 이폴에 test/test라는 폴더를 링크 걸어줌)

·  이진 파일의 경우 한번 저장한 후 변경될 경우 차이점만 저장하기 때문에 저장소를 효율적으로 사용할 수 있다.

· 소스 저장소의 크기에 관계 없이 일정한 시간 안에 가지 치기(branching)나 태그 넣기(tagging)를 할 수 있다.

·  태생적으로 클라이언트-서버, 계층 라이브러리 설계를 채택.

·  클라이언트/서버 통신규약이 버전간 차이를 양뱡향으로 보냄.

·   소스 저장소로의 접근이 최적화되어 있으므로, 소스 저장고에서 필요 없는 네트워크 트래픽을 줄일 수 있다.


- 기본 용어
  • Repository : 프로젝트 파일 및 변경 정보가 저장되는 장소
  • Import : 빈 Repository에 맨 처음 파일들을 채우는 것
  • Checkout(co) : Repository에서 프로젝트 관련 파일들을 받아 오는 것
  • Commit(ci) : Checkout한 파일의 수정사항을 갱신,Revision 1이 증가
  • Revision : commit 할 때 마다 카운트 되는 번호
  • Update (up) : checkout 한 파일들을 최신의 것으로 갱신, 소스 수정이나 commit 하기 전에 한번씩 해주는 것이 좋다.
  • Export : 버전 관리 파일들을 뺀 순수 파일만 빼내는 것.
  • Tag : 개념적으로 특정 시점에서 프로젝트의 스냅샷을 찍어두는 것이다. 즉 Revision번호 그 자체에 해당한다.
  • Brach : 브런치 생성은 복사와 같은 개념이다.
  • Truck : 프로젝트에서 가장 중심이 되는 디렉토리로 소스와 파일들이 포함된다.
  • Diff : 수정된 파일과 수정 이전 파일을 차이정보를 비교하여 것.

- 목적

  •  파일과 디렉토리 집합에 대한 변경을 추적하고 기록하기 위함.
  • 이력 관리 (누가/ 무엇을/ 무엇을 위해/ 언제/ )


- 버전 관리 시스템의 기본 과제

  복사->편집->병합



시나리오)
1. 두 명의 사용자가 동일한 파일을 읽습니다.
2. 두 사람 모두 각자의 사본을 편집을 시작합니다.
3. Harry가 지신의 버전을 먼저 게시합니다.
4. Sally가 실수로 Harry의 버전을 덮어씁니다.
SO, Harry가 수정한 내용은 없어 집니다.(기본 과제)


Trunk., branch, tags 관계


Trunk
  - 단어 자체의 뜻은 본체, 본문 등입니다.
  - 프로젝트에서 가장 중심이 되는 디렉토리입니다.
  - 모든 프로그램의 개발 작업은 trunk 디렉토리에서 이루어  집니다.
  - trunk 디렉토리 바로 아래에는 소스들의 파일과 디렉토리가 들어가게 됩니다.

Branch
  - trunk에서 뻗어져 나온 나무가지를 뜻합니다.
  - 프로그램을 개발하다 보면 trunk 디렉토리에서 또 다른 작은 분류로 빼서 따로 개발해야 할 경우가 있습니다. 프로젝트안의 작은 프로젝트라고 생각하면 됩니다.
- branches 디렉토리 안에 또 다른 디렉토리를 두어 그 안에서 개발하게 됩니다.

Merge
  - Trunk에서 분기된 Branch를 다시 Trunk로 합쳐는 작업

Tag
  - tag는 꼬리표입니다.
  - 이 디렉토리는 프로그램을 개발하면서 정기적으로 릴리즈 할 때, 0.1 / 0.2 / 1.0 등 이런식의 버전 별로 소스 코드를 따로 저장하는 공간입니다.
- 버전별로 태그를 붙여서 tag 디렉토리 안에 보관한다고 생각하면 됩니다.

 - SVN 명령어) - svn help [명령어]

add : 파일과 디렉토리를 버전관리 대상에 넣습니다. 저장소에 추가하도록 스케줄링 되며, 다음 commit할 때, 추가됩니다.

사용법 : add [PATH]

blame (praise, annotate, ann) : 지정한 파일이나 URL의 내용의 수정내역을 각 라인별로 리비전과 작성자를 보여줍니다.

사용법: blame TARGET[@REV]...

cat : 지정한 파일이나 URL의 내용을 출력합니다.
사용법: cat TARGET[@REV]... 

REV가 지정되면, 지정된 REV에서부터 찾아 출력합니다.
  
checkout (co) : 작업사본을 저장소로부터 꺼냅니다.

사용법: checkout URL[@REV]... [PATH]

REV가 지정되면, 지정된 REV에서부터 찾아 체크아웃합니다.
PATH가 생략되면, URL의 맨 마지막 디렉토리명이 꺼내어 저장될 디렉토리 이름으로 사용됩니다. 
   
cleanup : 제귀적으로 작업 사본을 순회하면서 복사, 제거시 실패한 잠금파일을 삭제하며,
중단된 명령을 재개합니다.

사용법: cleanup [PATH...] 

commit (ci) : 변경된 내용을 작업 사본에서 저장소로 전송합니다.

사용법: commit [PATH...]

로그 메시지는 반드시 넘겨져야 하며, 빈 메시지를 넘길 수도 있습니다.
만약 --message 나 --file 옵션을 사용하지 않았다면, 편집기가 수행됩니다.
잠긴 파일이 있거나, 잠긴 파일이 들어 있는 디렉토리는 성공적으로 커밋이 되면 잠금이 해제가 됩니다.

copy (cp) : 작업 사본 혹은 저장소의 내용을 이전 로그메시지와 함께 복사합니다. 

사용법: copy SRC[@REV]... DST

여러개를 복사할 때, 이들은 모두 DST의 하위에 추가되며, 이때, DST는 반드시 디렉토리어야 합니다.

SRC와 DST는 작업 사본(WC) 혹은 저장소 URL이 될 수 있습니다:
 WC  -> WC:   바로 복사하고 저장소에 이전 로그와 함께 추가하도록 스케쥴
 WC  -> URL:  작업사본을 URL에 복사하고 바로 커밋함
 URL -> WC:   URL로부터 체크아웃해서 현 작업 사본에 추가하도록 스케쥴
 URL -> URL:  서버상에서 바로 복사함; 브랜치,태그를 만들 때 사용됨
 모든 SRC들은 같은 종류의 것이어야 합니다.

경고: Subversion 이전 버전과의 호환성을 위해서, 작업 사본간의 복사
(WC -> WC)는 저장소를 경유하지 않고 수행됩니다. 이런 이유로 원본에서
사본으로 복사할 때, 병합되는 정보는 기본 동작으로는 전달되지 않습니다

사용법: copy SRC[@REV]... DST

delete (del, remove, rm) : 파일과 디렉토리를 버전 관리 대상에서 제거합니다.

사용법: 1. delete PATH...
        2. delete URL...

★diff (di) : 두 리비전 혹은 두 경로상의 차이점을 출력합니다.

Export : 로컬 시스템에서 정리된 디렉토리 트리 내보내기

로컬 시스템상의 버전 없는 복사본, 즉 정리된 트리 디렉토리를 프로젝트 저장소나 로컬 작업 복사본 내부로부터 추출할 수 있습니다. 이전 개정판의 정리된 디렉토리를 저장소로부터 가져오려면 다음과 같이 입력합니다.

help(?, h) : 본 프로그램과 그 하위 명령들에 대한 사용법을 보여줍니다.

Import : 버전관리 대상이 아닌 파일과 디렉토리를 추가합니다.

import를 사용하여 버전 없는 파일이나 트리를 프로젝트 저장소로 반복 커밋할 수 있습니다. 필요에 따라 저장소에 상위 디렉토리가 만들어집니다. 다음 명령은 PATH에서 URL로 복사본을 반복 커밋합니다. PATH가 생략되면 "."로 가정합니다.

사용법 import [PATH] URL

★Info : 사본이나 저장소의 파일, 디렉토리의 정보를 출력합니다.

사용법: info [TARGET[@REV]...]

list (ls) : 저장소에 있는 항목들을 나열해줍니다.
사용법: list [TARGET[@REV]...]

Lock : 작업 사본이나 저장소의 URL을 잠굽니다. 다른 사용자가 변경하여 커밋할 수 없습니다.

사용법: lock TARGET..

log : 커밋 로그 메시지

'작업 복사본' 또는 저장소에 있는 파일/디렉토리의 개별 파일/디렉토리 이력을 조회하면서 개정 정보를 추적할 있습니다


merge : 변경사항 병합하기
svn merge 명령을 실행하면 서브버전 기능을 통해 저장소에서 가장 최신 버전의 파일을 작업 복사본으로 병합할 있습니다.

mergeinfo : Display merge-related information.

SOURCE[@REV] [TARGET[@REV]]

★mkdir : 디렉토리 만들기

디렉토리를 만들어 버전관리 대상으로 둡니다.

사용법: 1. mkdir PATH...
        2. mkdir URL...

디렉토리를 만들어 버전관리 대상으로 만듭니다.

move (mv, rename, ren) : 작업 사본내 혹은 저장소 안의 파일이나 디렉토리를 이동하거나, 이름을 바꿉니다.
1. PATH로 지정된 디렉토리들을 작업 디렉토리안에 만들고,다음 커밋할 때 추가되도록 스케쥴링 합니다.
2. 각 디렉토리들을 지정한 URL에 직접 커밋되는 형식으로 생성합니다.
  

  두 경우 생성될 디렉토리 상위의 디렉토리들은 존재해야만 합니다.
  --parents 옵션을 주면, 중간 디렉토리를 생성합니다

사용법: move SRC DST

propdel (pdel, pd) : 속성을 파일, 디렉토리, 리비전으로부터 제거합니다.
propedit (pedit, pe) : 속성을 외부 편집기를 통해 수정합니다.
propget (pget, pg) : 파일, 디렉토리 또는 리비전의 속성값을 출력합니다.
proplist (plist, pl) : 파일, 디렉토리, 리비전의 모든 속성을 출력합니다.
propset (pset, ps) : 파일, 디렉토리, 리비전의 모든 속성을 설정합니다.

resolve : 작업사본의 파일이나 디렉토리에 발생한 충돌을 해결합니다
사용법: resolve --accept=ARG [PATH...]

Resolved : 작업사본내의 파일이나 디렉토리의 충돌 상황을 제거합니다.
로컬 작업 복사본을 갱신하는 충돌이 발생할 있습니다. 경우 충돌을 해결해야 합니다. 충돌 해결  svn resolved PATH...라고 입력하여 충돌이 '해결'되었음을 작업 복사본에 알립니다.

사용법: resolved PATH...

revert : 작업 사본을 받아 왔던 최초 상태로 되돌립니다. (작업한 내용을 모두 되돌립니다.)
사용법: revert PATH...

status (stat, st) : 파일/디렉토리의 상태 가져오기 
    
switch (sw) : 작업 복사본 전환하기
svn switch URL [PATH]를 사용하면 새 URL을 미러링하도록 작업 복사본을 갱신할 수 있습니다. 작업 복사본 또는 그 일부를 새 브랜치로 이동할 수 있습니다. 이 하위 명령을 브랜치 바로가기로 사용할 수 있습니다.


unlock : 작업사본이나 저장소 URL의 잠금을 해제합니다.
사용법: unlock TARGET...

update (up) : 작업 복사본 갱신하기
버전 관리에서는 다음 명령을 사용하여 로컬 작업 복사본을 프로젝트 저장소로 매일 갱신하는 것이 좋습니다.

댓글 없음:

댓글 쓰기

HOME