본문 바로가기

etc

[SVN] tortoise svn branch merge

 

tortoise svn(이하 svn)을 가지고 trunk 와 branch 간에 merge 하는 방법을 소개한다.

svn에서 머지하는 방법은 여러방법이 있는데(merge 관련 팝업메뉴가 여러군데서 뜨기 때문에)
크게 원본인 trunk 디렉토리에서 시작하는 방법(merge to)과 branch 디렉토리에서 시작하는 방법(merge)가 있을 것 같은데,
당연히 결과물도 같고 중간에 거치는 내용도 같기 때문에 취향대로 골라서 사용하면 되겠다.

상황은 trunk에서 branch로 merge하는 상황을 가정한다. 
(생각해보니 일반적인 상황이라면 branch에서 trunk로 merge 하는게 많을 듯 한데...)

#include <stdio.h> 

int main()
{
         printf("Hello world!\n");

         printf("for delete\n"); 

         return 0;
}




1. trunk 디렉토리(수정된 원본)에서 시작하는 방법

(1) trunk 루트에서 show log를 선택한다. 

(2) 머지하고자 하는 리비전을 확인 후 선택(여러개도 가능)한 후에 merge revision to를 선택한다.
(3) merge 할 대상 디렉토리를 선택한다.
(4) 문제(conflict)가 없다면 merge 가 완료된다.
(5) branch 디렉토리에 가보면 merge된 내용이 적용된 파일들은 modify  상태가 되어 있다. 확인 후 커밋하면 완료된다.



2. branch 디렉토리(수정할 대상)에서 시작하는 방법

(1) trunk에서 가져올 수정된 내용을 확인한다.
(2) branch 루트에서 merge 메뉴를 선택한다.
(3) merge 방식을 선택한다.(여기서는 특정 리비전을 가져오기 위한것으로 merge a range of revisions를 선택함)
(4) merge 해 올 소스 repository 와 revision 을 선택할 수 있는 창이 열린다.
(5) URL to merge from 은 trunk 를 선택
(6) 가져올 revision 선택
(7) 가져올 repository와 revision 을 확인한다.
(8) merge 실행시 세부 옵션을 선택한다. 여기까지 마쳤으면 Test merge 버튼을 눌러 merge 테스트를 해본다.
(9) Merge Test 결과를 확인 후 Merge 버튼을 누르면 merge가 완료된다. branch에 가서 확인 후 커밋한다.

3. merge 과정 중 conflict가 발생했을 경우

(1) trunk 관련소스
(2) branch 관련소스
(3) 위와같이 서로 다른 repository에서 같은 라인이 다르게 수정되면 merge시에 당연히 conflict가 발생하게 된다.
이 경우 merge를 실행하면, 아래와 같이 conflict를 resolve 할 수 있도록 선택창이 뜬다.
내용은 Choose item, Resolve conflict, Leave conflicted 이렇게 3가지다. 

Choose item은 merge원본과 대상중에 하나의 것으로 선택하여 conflict를 해결하는 방법이고(local이면 merge할 대상파일 내용으로, repo면 원본이겠죠?)

Resolve conflict내용중 Edit conflict를 누르면 충돌나는 부분을 해결할 수 있게 diff 에디터가 실행되어, resolve를 할 수있게 하고

Leave conflicted 버튼들을 선택하면 충돌난 상태 그대로 놔두게 된다.(일반적인 conflict 상황처럼 해결하면 된다)


(4) 선호하는 방법에 따라 해결하면 된다.(여기서는 Resolve later를 실행해서 Conflicted 상태로 merge 되게 만들었다)
일반적인 Conflict 상황과 동일하므로 해결하고 Commit하면 완료된다.

'etc' 카테고리의 다른 글

[Network] IRC구조  (0) 2013.02.22
[C++] warning C4996  (0) 2013.02.21
[C++] 전방선언과 include  (0) 2013.02.13
[C++] GetLastError() 활용  (0) 2013.02.13
[Network] 2-Tier, 3-Tier, n-Tier  (0) 2013.02.13