티스토리 뷰



이번 포스팅은 대부분의 서브버전 사용자는 거의 사용할 기회가 없거나 구경조차 할일이 없을 가능성도 있는 기능인 병합(Merge)과 잠금(Locking) 기능입니다. 대부분의 사용자는 체크아웃, 업데이트, 커밋이면 대부분의 필요가 해소됩니다. 하지만 때로는 복잡한 상황과 현상을 단순화 시켜 줄 수 있는 기능이기도 합니다.


■ 병합(Merge)


앞선 포스팅("서브버전(Subversion) 브랜치와 태그" 참조)에서 태그는 특정 시점의 리비전에 표시를 해둔 것으로 태그에 대한 수정 작업을  하지 않는다고 언급했는데, 브랜치는 메인 trunk 및 다른 브랜치와는 별개로 독자적인 개발 프로세스를 진행 합니다. 브랜치에 대한 개발 프로세스가 안정화되고 완료되면 다시 메인 trunk나 다른 브랜치와 합치는 작업이 필요한데 이 과정을 병합(Merge)이라 합니다.

 

병합 과정은 반드시 작업 사본을 기반으로 수행 합니다. 앞서 브랜치나 태그는 작업 사본 없이도 저장소 내용만으로도 브랜치나 태그를 생성할 수 있었지만 병합을 위해서는 작업 사본이 먼저 준비되어야 한다는 것입니다. 또한 병합 작업 과정에서의 작업 사본은 되도록 저장소 내용을 내려받은 그대로의 상태로 수정없이 작업을 수행하는 것이 좋습니다. 병합 과정에 문제가 있거나 혼란한 상황으로 수습하기 어려운 상태라면 서브버전 Revert로 간단하게 되돌릴 수 있기 때문 입니다.

 

병합 원본과(From, Source) 병합 결과(To, Destination) 사이의 병합의 과정은 둘 사이의 차이를 검토하는 병합 내용의 검토, 병합 수행, 충돌 해소 및 결과 확인, 병합 완료(커밋)의 과정으로 수행 합니다.



■ 병합 내용의 검토



브랜치 또는 특정 리버전과 비교는 CLI "svn diff 병합원본URL 병합결과URL" 명령이나 탐색기 파일섹션을 Shift+우클릭한 팝업 메뉴에서 TortoiseSVN>Diff with URL로 검토해 볼 수 있습니다.



병합은 단순 코드 병합이 아니기 때문에 병합으로 인한 영향을 코드 개발의 수준에서 꼼꼼하게 살펴 보아야 합니다.



■ 병합 수행



병합의 수행은 명령행에서는 "svn merge 병합원본URL 병합결과URL 작업사본경로"로 수행하고 병합 테스트를 위해서는 --dry-run 스위치를 추가하면 된다. 윈도우에서의 병합 수행은 탐색기 팝업메뉴>TortoiseSVN>Merge로 할 수 있는데, 위의 그림과 같이 3가지 병합 방법중의 하나를 선택합니다.



1. 리비전 범위 병합 : 브랜치나 Trunk에 관계없이 특정 리비전 범위 가운데 있는 변동 사항을 작업 사본에 적용할 때 사용합니다.



2. 브랜치 재통합 : 메인 Trunk에서 분리했던 브랜치의 작업 완료후 Trunk에 재통합 할 때 사용하는 것으로 trunk에 대한 작업 사본을 준비하고 병합 원본 URL로 브랜치를 지정하는 방식 입니다.



3. 트리 비교 병합 : 두개의 서로 다른 트리간의 차이를 작업 사본에 반영할 때 사용 합니다.



위의 설명과 같이 병합 타입을 따른 선택과 정보 입력을 하고 [Next>]버튼을 클릭하면 병합 타입별 옵션을 지정할 수 있고 명령행 스위치 --dry-run 처럼 [Test merge]버튼을 통해서 실제 병합 이전에 테스트를 진행할 수도 있습니다.



병합 과정에 충돌이 발생하면 위와 같은 창을 통해서 즉시 충돌을 해소할 수도 있고 추후에 정리 할 수도 있습니다.



■ 잠금(Locking)


앞서 언급 했던 서브버전 업데이트 시점의 충돌 과정에서 소스코드와 같은 텍스트 파일에서는 내가 수정중인 파일을 다른 사람이 먼저 수정하여 커밋했더라도 동일한 라인이 아니라면 충돌없이 병합되고 충돌이 있더라도 마킹을 포함한 충돌 해소 가이드로 어렵지 않게 충돌을 해소할 수 있었지만, 이미지나 워드, 엑셀 문서, DLL이나 실행파일 같은 바이너리 파일들은 동시 작업으로 인한 충돌의 해결이 어렵습니다. 이런 경우에는 특정 파일의 수정 작업에 잠금 장치를 두어 잠금을 소유한 사람만 커밋할 수 있고 잠금 상태에서는 다른 사람은 커밋할 수 없도록 하여 혼란을 예방할 수 있습니다.



명령행에서는 "svn lock -m 잠금메시지 잠글경로" 명령으로 잠그고 "svn unlock 잠근경로" 명령으로 해제할 수 있고 윈도우에서는 탐색기에서 잠글 파일의 팝업메뉴>TortoiseSVN>Get lock으로 잠그고(잠근 파일안 자물쇠 아이콘으로 표시 됩니다), 잠근 파일의 팝업메뉴>TortoiseSVN>Release lock으로 해제할 수 있습니다.





댓글
댓글쓰기 폼