Repository: Subversion이 version control 관련 data를 저장하는 곳이다. 구성하는 방법은 다양하다: 한 repository에 여러 project를 담을 수도 있고, 한 repository에 한 project만 담는 경우도 있다. 두 방법 모두 장단점이 있다. 한 project당 하나씩의 repository를 사용하는 것이 일반적으로 더 바람직하다.
새 repository 만들기
Command line의 경우 다음 명령어를 사용한다.
$svnadmincreate[대상path이름]
Subversion에 새 프로젝트를 import하는 법?
Project관련 file들이 저장된 folder안에서 불필요한 file들을 제거한다. 보통 임시 file, compiler나 linker가 생성하는 file들을 제거한다.
svn_repository folder아래 새 folder에 그 프로젝트를 담을 repository를 만든다.
Repository 안에 3개의 folder를 만든다: trunk, branch, tags.
trunk로 project를 import한다. Repository 안의 잘못된 folder level로 import 하는 일이 빈번하다.
작업 공간으로 다시 project를 Check-out 한다.
Subversion에 새 프로젝트를 Add하는 법?
Repository browser로 repository 안에 folder를 직접 생성한다.
만들어진 folder를 import하고자하는 file을 담고 있는 folder(check in 대상 project의 file들이 저장된 최상위 folder)로 check out 한다. 예를 들어 “~/source/file.c”, “~/source/subfolder/subfolderfile.c”를 add하고 싶다면 “~/source/” folder로 check out 한다. Warning이 뜰 것이다. Top level folder는 version 관리 되고 있지만 내용은 version 관리되지 않고 있지 않은 상태가 될 것이다.
TortoiseSVN→Add... 명령으로 version관리하고 싶은 file을 추가한다. File이나 subfolder icon이 물음표 상태로 Add.. 명령이 뜨지 않으면 folder window 배경에 오른쪽 mouse click.
Top level folder를 commit한다.
Repository 안의 잘못된 folder level로 import되었을 경우 바로잡기 어렵다. Move를 허용하나, move 이전과 이후의 file은 별개의 객체로 인식되는 것으로 보인다.
Subversion에 새 프로젝트를 import할 때 원하는 file만 import하는 것은 사실상 어렵다. 새 프로젝트를 Add하는 법 참조.
Subversion에 여러 Repository를 만들려면 Repository별로 하나씩 folder를 만들어 주는 것이 바람직하다.
Sue가 r4를 우선 update 받아서 수정 (Hot Dog을 추가 또는 file 전체 덮어쓰기)한 다음 commit할 수 있다.
여러사람이 동시에 작업한 결과를 안전하게 합치는 법?
모든 경우에 다 가능한 것은 아니다.
잘만 되면 생산성을 n배 늘릴 수도 있다.
CVS나 Subversion인 경우에는 가능하지만, 다른 version control system에서는 불가능할 수도 있다.
주의: Commit에 성공과 compile에 성공은 별개의 문제이다. Conflict 없이 여러 commit에 error 없이 성공하더라도 build 과정에서 error가 발생할 수 있다. Compile에 성공과 bug 없는 SW도 별개의 문제이다.
먼저, 어느 version을 기반으로 작업할 것인지 결정한다.
누가 어느 부분을 개정할 것인지 겹치지 않게 분명하게 결정한다. (누가 먼저 commit하더라도 상관 없도록 한다.)
각자 개정 후 commit 한다.
어떤 project가 lock 되었을 때의 효과는?
Subversion은 기본적으로 locking을 별로 선호하지 않는 system이다. 충돌이 일어날 수 있는 상황인 두 사람이 같은 file 같은 version의 같은 부분을 수정할 확률이 높지 않다고 보는 것이다. 그러나 file의 크기가 크지 않은 경우에는 누가 수정을 하더라도 비슷한 위치에서 수정이 일어나기 때문에 충돌이 일어날 가능성이 더 높을 것이다. 또한, 그림 file 등과 같이 merge가 곤란한 file의 경우, lock을 하는 편이 훨씬 안전하다.
Harry가 어떤 file을 lock하면, Sally는 file을 check-out하거나 update 받을 수는 있지만 commit하지는 못한다. 이후 Harry가 lock을 풀면 Sally가 다시 commit할 수 있다.
Keyword란?
Subversion 안에 보관중인 file 자체에 file의 이름, 저자, 개정 번호 등의 정보를 자동적으로 기록, 갱신하기 위하여 keyword를 사용할 수 있다. Subversion에서 사용할 수 있는 keyword들 가운데는 다음과 같은 것들이 있다. (대소문자 구별)
Branch: Project의 진행에 영향을 주지 않으면서 새로운 기능, 기술 등을 시험해 보고 싶을 때가 있다. 그럴 때 branch를 만들어서 프로젝트의 본류와 병행으로 개발할 수 있다. 개발이 성공적이라면 추후에 본류에 합류시킬 수 있다. 그렇지 못하다면 합류시키지 않으면 된다.
개발자 Joe 와 Sue 가 같은 file의 같은 version을 수정중이었다. Joe가 자신이 수정한 file을 먼저 commit 하였다. Sue가 그 사실을 알지 못하고 수정한 file 부분이 Joe가 수정한 부분과 달랐다. 위 그림의 경우, 둘째줄이 Cheese가 되어야 하는지 Hot Dog이 되어야 하는지 혼란이 일어난 것이다. 이런 상태를 방지하기 위해 lock을 사용할 수 있다.