TortoiseSVN
프로그램 용어 > Check out, Update, Commit, Conflict, Resolve, Keyword

Check out: 저장소에서 project를 작업공간에 인출하는 것. Download와 유사하다.
Check out의 방식
예를 들어 저장소 안에서 check-out할 file들의 위치가 다음과 같다고 하자.
file:///c:/svn_repository/Project01/trunk/
여기서 Project01이 project 이름이고 trunk는 주류 file이라는 의미이다.
작업할 folder의 상위 folder를 만든다. 우리가 희망하는 작업 공간의 위치가 다음과 같다고 하자.
 My Documents\Development\Project01\

그러면 “My Documents” 아래 “Development”라는 이름의 folder를 만들면 된다.
Checkout 대화상자를 연다. “Development” folder를 열고 folder 배경에서 오른쪽 Mouse click하여 SVN Checkout... menu를 선택하면 Checkout 대화상자가 열린다.
“URL of repository”난의 [...] button을 눌러 “file:///c:/svn_repository/Project01/trunk”를 선택한다.
“Checkout directory”난에 “My Documents\Development” folder를 선택한다.
Checkout Depth는 Fully recursive를 선택하자.
Revision은 HEAD로 하면 최신 file이 들어온다. 만일 다른 revision을 선택하고 싶을 때는 [Show log] button을 눌러 확인하자.
[OK] button을 누르면 저장소의 내용이 작업 공간으로 copy된다. 처음에는 초록색 체크 표시가 되어 있을 것이다. 이는 이 file 이 저장소의 내용과 일치한다는 의미다.
Commit: 작업공간에서 수정된 project를 저장소에 반영하는 것. Upload와 유사하다. Commit하기 전에 작업 공간의 file을 충분히 시험하여야 한다.
수정된 file 하나를 Commit: Check out 되어 version 관리되고 있는 file이 저장소의 내용과 일치할 때는 초록색이다. 이 file을 수정하고 나면 붉은 느낌표가 나타난다. 저장소에 변경한 내용을 반영하려면 Commit해야 한다.
File의 icon에 오른쪽 Mouse Click하면 “SVN Commit...” 명령이 나타난다.
선택하면 Commit 대화 상자가 나타난다. Message난과 Changes made난이 있다.
Message 난에 Commit message를 상세히 입력한다. Changes made 난에서 수정 부분을 확인할 수 있는 “Compare with base” 명령을 선택할 수 있다.
[OK] button을 누르면 변경 내용이 repository에 반영 된다.
다른 사용자가 같은 project를 check-out하거나 “Update” 명령을 사용하면 변경 내용이 반영된다.
한 project안에서 여러개의 file을 수정한 후 한번에 Commit하는 법?
수정된 file을 담고 있는 folder icon을 확인한다. 붉은 느낌표가 떠 있으면 icon에 오른쪽 Mouse Click하여 “SVN Commit...” 명령을 선택한다.
Commit 대화 상자의 Message 난에 Commit message를 상세히 입력한다. Changes made 난에는 수정된 file의 목록이 나타난다. 필요에 따라 compare with base 하여 변경 내용을
[OK] button을 누르면 변경 내용이 repository에 반영 된다.
다른 사용자가 같은 project를 check-out하거나 “Update” 명령을 사용하면 변경 내용이 반영된다.
Commit message: Commit 할 때 수정된 내용의 의미를 적어둔다.
Update: 공동으로 작업할 때 다른 사람들이 수정하여 commit한 모든 최신 version을 일괄적으로 받아오는 것. 역시 download와 유사하다.
Diff: 수정된 file의 내용 또는 저장소에 저장된 두 revision 사이의 차이를 비교해 준다.
Conflict
Conflict의 해결
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들 가운데는 다음과 같은 것들이 있다. (대소문자 구별)
$Date$	마지막으로 commit된 날짜
$Revision$	마지막으로 commit된 개정판
$Author$	마지막으로 commit한 개발자
예를 들어 C source에는 다음과 같이 사용할 수 있다.
//$Date$
//$Revision$
//$Author$
#include <stdio.h>
int main ()
{
	printf (“Hello subverion!!!\n”)
}
그 후 TortoiseSVN→Properties...를 선택하여 대화상자를 연다.
svn:keyword를 선택한 후 Property value난에 “Date Revision Author”를 입력한다.
[OK] 누르고 Commit 한다.
Command line을 이용한다면 다음과 같이 할 수 있다.
$ svn propset svn:keywords "Date Author Revision" [대상 file 이름]