2009년 11월 06일
Eclipse의 CVS, Branch를 Head로 Merge하기...
내가 바보라서 잘 몰랐을지도 모른다.
Eclipse에서는 CVS를 이용한 버전 관리를 지원하는데, CVS에는 branch라는 훌륭한 기능이 있다.
예를들어, 어떤 작업을 진행하다가 무언가 코드를 수정해야 하는데, 이 수정 작업이 성공할지 실패할지 모르는 일이 발생했다.
이럴때 branch를 통해 원래 진행하던 작업(common base)는 그냥 두고, 따로 코드를 복사하여 수정 작업(branch)를 진행하는 것이다.
이 branch가 성공하면 다시 common base로 통합하고, 실패하면 그냥 branch를 버리고 없었던 일로 해버리면 된다.
앞서말한 common base가 CVS에서 따로 version으로 빠진 작업이라면 Eclipse의 CVS에서 제공하는 merge를 통해 통합이 가능하다.
그림 1에서 end tag에 branch를 선택하고, start tag에 통합시킬 common base version을 선택하면 된다.

[그림 1]
그런데...
Eclipse에 이유를 알 수 없는 문제가 하나 있으니..
common base 작업이 HEAD일 경우 merge가 안되는 것이다.
즉, fileA.java의 리비전이 1.2일 때 tag를 생성하면 fileA.java의 리비전은 1.2.1.1이 된다.
이를 수정하고 commit하게 되면 1.2.1.2가 되게 되는데 이를 HEAD로 merge할 수 없다는 것, 다시 말해 1.3으로 commit이 안된다는 것이다.
이를 해결 하기 위해 갖은 고난 끝에 아래와 같은 해결 책을 찾았다.
1. 현재 branch하여 작업 중인 것과 별개로 HEAD를 checkout한다.
2. Package Navigator에서 우클릭 하여 Team>Merge... 를 수행한다.
3. 그림 1과 같이 end tag에 branch를 선택하고, start tag에 "HEAD"라고 적는다.
4. Perform the merge into the local workspace를 선택하고 Finish를 선택한다.
5. HEAD가 checkout된 프로젝트가 branch로 수정된다.(conflict는 알아서 해결)
6. 이것을 commit한다.
7. 이로써 branch를 HEAD(common base)로 올리게 되었다.
와~
ps. 정리를 하면서 느낀 건데..
tag나 version을 branch하여 작업하는게 아니라 HEAD를 바로 branch하면 그냥 merge하면 될거 같기도 한데... 테스트 해봐야 겠다.
역시 안되더라.. 이유는 잘 모르겠다. 뭔가 헷갈린 것일지도 모르지만...
common base는 무조건 Version에서 선택해야 한다.
즉, HEAD로는 merge가 안된다는 뜻?!
Eclipse에서는 CVS를 이용한 버전 관리를 지원하는데, CVS에는 branch라는 훌륭한 기능이 있다.
예를들어, 어떤 작업을 진행하다가 무언가 코드를 수정해야 하는데, 이 수정 작업이 성공할지 실패할지 모르는 일이 발생했다.
이럴때 branch를 통해 원래 진행하던 작업(common base)는 그냥 두고, 따로 코드를 복사하여 수정 작업(branch)를 진행하는 것이다.
이 branch가 성공하면 다시 common base로 통합하고, 실패하면 그냥 branch를 버리고 없었던 일로 해버리면 된다.
앞서말한 common base가 CVS에서 따로 version으로 빠진 작업이라면 Eclipse의 CVS에서 제공하는 merge를 통해 통합이 가능하다.
그림 1에서 end tag에 branch를 선택하고, start tag에 통합시킬 common base version을 선택하면 된다.

[그림 1]
그런데...
Eclipse에 이유를 알 수 없는 문제가 하나 있으니..
common base 작업이 HEAD일 경우 merge가 안되는 것이다.
즉, fileA.java의 리비전이 1.2일 때 tag를 생성하면 fileA.java의 리비전은 1.2.1.1이 된다.
이를 수정하고 commit하게 되면 1.2.1.2가 되게 되는데 이를 HEAD로 merge할 수 없다는 것, 다시 말해 1.3으로 commit이 안된다는 것이다.
이를 해결 하기 위해 갖은 고난 끝에 아래와 같은 해결 책을 찾았다.
1. 현재 branch하여 작업 중인 것과 별개로 HEAD를 checkout한다.
2. Package Navigator에서 우클릭 하여 Team>Merge... 를 수행한다.
3. 그림 1과 같이 end tag에 branch를 선택하고, start tag에 "HEAD"라고 적는다.
4. Perform the merge into the local workspace를 선택하고 Finish를 선택한다.
5. HEAD가 checkout된 프로젝트가 branch로 수정된다.(conflict는 알아서 해결)
6. 이것을 commit한다.
7. 이로써 branch를 HEAD(common base)로 올리게 되었다.
와~
ps. 정리를 하면서 느낀 건데..
역시 안되더라.. 이유는 잘 모르겠다. 뭔가 헷갈린 것일지도 모르지만...
common base는 무조건 Version에서 선택해야 한다.
즉, HEAD로는 merge가 안된다는 뜻?!
# by | 2009/11/06 01:29 | 공부 | 트랙백 | 덧글(0)





