TortoiseSVN으로 brench/tag를 관리해 보자.
작업하기 전에 SVN서버에 디렉토리를 만들때 repository/project01/trunk 형태로 만들고 trunk 아래에 project의 모든 파일을 둔다. 그렇게 하고 모든 작업은 trunk에서 한다.
<< brench >>
brench를 만들 필요가 생기면(코드에 큰 변화가 있거나, 기능을 테스트 하거나, 수정기간이 오래걸릴때 등등..)
먼저 trunk폴더를 commit이나 update해서 최신상태로 만든다.
탐색기의 trunk 폴더에 마우스 오른쪽 클릭해서 Brench/tag 를 클릭한다.
Copy(Brench/tag) 창이 뜬다.
To URL에 복사본을 만들 폴더경로를 입력한다. 필요하면 ... 버튼 눌러서 SVN서버에 직접 필요한 폴더를 만든다.
project01/brenches/funcA 라고 입력하려면 brenches 폴더까지는 존재해하고 funcA폴더는 없어야 한다.
project01/brenches/funcA <-- 이 경로의 의미는 funcA란 기능을 테스트하기위한 brench를 만들겠다는 의미다.
brench는 한꺼번에 여러개 만들어놓고 사용할 경우가 있기때문에 brenches폴더를 따로 만들어 한꺼번에 관리하는게 폴더구조가 깔끔할듯 함.
이렇게 해놓고 필요하면 Log message를 입력하고나서,
맨 아래쪽에 있는 Switch working copy to new brench.tag 를 체크하고 OK를 누르면 SVN서버에 brech가 한개 만들어지게 된다.
이상태는 trunk폴더는 repository/project01/brench/funcA사본에 연결된 상태이다.
반드시 trunk폴더를 repository/project01/trunk 사본에 연결시켜야 된다.
이거 안하면 낭패본다.
Switch working copy to new brench.tag 이거를 체크 안하면 trunk폴더를 따로 Switch해줄 필요는 없는것 같다.
(이게 좋겠다..)
여기까지하면 서버의 repository/project01/ 에는 trunk, brench/funcA 폴더가 있고, 두 폴더에는 똑같은 파일들이 있다.
이 상태에서 탐색기의 project01 폴더에서 update해보면 서버의 폴더구조가 그대로 내려온다.
trunk에서의 작업은 trunk 폴더에서 trunk로 switch해서 작업하고,
brench/funcA 에서의 작업은 brench/funcA 폴더에서 brench/funcA로 switch해서 작업하면 됨.
*** 조심할 내용 ***탐색기의 trunk 폴더에서 작업하더라고 switch 를 brench/funcA로 해두면 brench/funcA 의 내용이 다운받아진다.
이상태로 작업하고 commit하면 당연히 서버의 brench/funcA내용이 갱신된다. update도 마찬가지인다.
이거 햇갈리면 큰일난다. <-- 반나절 삽질후 깨달음... OTL
즉 swich라는것은 project01안의 여러사본중에 어떤 사본을 다운받아서 작업할지 선택하는 것임.
<< merge >>
brench/funcA 에서 작업이 끝나면 trunk로 merge한다.
trunk폴더에서 trunk로 switch해 놓은 상태로 마우스 오른쪽 클릭해서 merge 선택한다.
세가지 merge 타입을 선택하라고 하면 제일 위의 것(Merge a range of revision) 선택 하고 next
URL to merge from : brench/funcA의 경로를 선택
Revision range to merge : brench/funcA의 리비전중에서 merge할 범위(선택 안하면 모든 리비전을 다 merge함)
Working Copy : trunk의 경로
위와같이 입력하고 next -> Test merge해보면 어떻게 merge될지 미리한번 볼 수 있음.
merge 버튼을 누르면 brench/funcA의 변경,추가사항이 trunk로 합쳐진다.
같은 파일을 같이 수정한것들이 있으면 conflict 될것이고, 이 경우는 코드를 보면서 하나씩 수정해 줘야한다. (이런것까지 자동으로 할수는 없음...)
trunk에 적용되어있는 변경내용은 commit해줘야 서버의 trunk 폴더에 적용이 된다.
<< tag >>
tag는 merge와 똑같다.
tags라는 폴더를 만들어 놓고 여러개의 tag를 관리하길 추천함.
tags/release_version1.0, tags/release_version2.0 같은 식으로..
이렇게 만들어진 tags는 건드리면 안됨.
현재 상태를 완벽하게 보관하기 위해서 사용함.
[출처] TortoiseSVN - branch, tag, merge, switch|작성자 베이스캠프