본문 바로가기

프로그램/cvs

CVS에서 소스 충돌 날 경우 mark as merged 수행할때 알아야 할 점

반응형
CVS 를 이용하여 소스관리를 할떄

conflict 가 날 경우 보통 소스를 수작업으로 수정한 후 mark as merged 를 수행하게 된다.

하지만 실수로 수정하지 않고 mark as merged 를 수행하게 되면 어떻게될까.

궁금해서 실험을 해봤다.
(명확하게 나와있는 곳이 없었다기 보단 못찾았겠지...-_-)

conflict 에 의해 빨간 색으로 표시된 소스가 표시되고
이를 local에 반영하지 않은 상태에서 mark as merged 를 수행하게 되면
로컬 소스의 version이 한개 올라가게 된다.

그리고 로컬 소스는 commit 가능한 상태로 변경되게 된다.

여기서 의문이 들었떤 점은 commit 상태가 되더라도
로컬 소스와 서버 소스는 다른 상태이지 않은가?
그런데도 commit 표시가 된다는건 mark as merged 를 통해 서버쪽 소스가 변경되는건가?

확인 결과 로컬 소스가 commit 가능 상태로 변경되지만 서버의 소스는 변경되지 않았다.

어라??????????

그럼 로칼 소스와 서버 소스가 다른데도 commit 이 되는거야?

그런거더라.Orz

mark as merged 후 다시 로컬 소스와 서버 소스를 비교를 해보면
서로 다른 소스 부분이 로컬 에서 서버로 commit 될 대상으로 잡혀있게 된다.
결국 로컬 소스를 우선으로 삼아 서버 소스를 엎어쳐버리게 된다.

그러므로 conflict 시 서버소스를 반영 안했다면
commit 하기 전에 commit 대상을 살펴본 다음에
서버소스를 로컬소스에 반영해줘야 할 것이다.

아니면 다른 방법으로 다른 사용자가 똑같은 소스를 빈공간 추가 같은 행위 후
version 을 올려 다시 commit 해주는 방법이 있었다.
(이럴 경우 다시 conflict 되므로..)

결론은..-_-;
1. mark as merged 는 가급적 쓰지 말자.
conflict 난 부분을 반영 한 후 update 로 처리하는것이 최고다.-_-;

2. mark as merged 를 쓸 수 뿐이 없다면 서버 부분을 잘 반영한 후 쓰자.

3. 서버 수정분 반영 없이 mark as merged 를 하더라도 서버 소스에 반영이 되진 않으니 쫄진 말자.
commit 하기 전에 서버소스와의 비교를 통해 로컬 소스를 다시 잘 수정해서 올리자.


이상임.Orz