본문 바로가기

프로그래밍/JAVA

Subclipse(SVN)에서 충돌(conflict)이 일어나는 경우 해결법

예전에 한 친구와 프로젝트를 같이 진행한 적이 있었다. 그때 svn을 사용해서 개발하려고 subclipse를 설치해서 사용했다.
그리고 열심히 프로젝트를 진행하려고 하는데 크나큰 문제점이 닥쳤다.

revision1 인 파일을 나와 내 친구가 update를 통해 받은 상태에서 각자의 작업을 진행하고 있었고, 내 친구가 먼저 수정을 끝내고 commit을 했다. 나도 얼마있지 않아서 작업을 끝내고 commit을 하려고하는데 error가 발생했다.
이유는 revision 때문이었다.

친구가 commit을 한 순간 그 파일은 revision2가 HEAD로 된다. 그런데 나는 revision1을 가지고 수정을 한 상태이니, 당연히 commit을 못하도록 막는 것이다.

그런데 오늘에서야 그 해결책을 찾아냈다.


방법은 간단하다.

먼저 앞에서 말한 상황과 같은 상황을 만들어보자.
아래의 Test.java파일은 revision182이다.




여기에서 수정을 약간 가해보자.


그리고 수정된 파일을 commit하면 이제 revision183이 된다. 이 상태가 내 친구가 commit을 한 상태이다.



그런데 나는 아직 update가 되지 않은 상태이므로 그 이전 상태로 돌아가야 한다.

Test.java에서 오른 클릭하여 Team - Switch to another Branch/Tag/Revision을 눌러서 revision182로 돌아가도록 하자.




다시 revision182로 돌아가서 여기에서 친구가 수정한 부분과 다르게 수정을 해보자.



이렇게 수정을 한 뒤에 team - commit을 해보면 에러가 발생한다는 것을 알 수 있다.



이제 본격적으로 우리가 알아봐야 할 부분이다.
Test.java에서 오른클릭하여 team - update to HEAD를 눌러보자. 그러면 다음과 같은 화면을 볼 수 있을 것이다.
(이때 Test.java의 아이콘에 별표가 아닌 사각형이 생김에 유의하자.)



subclipse에서 친절하게도 HEAD버전와 충돌이 일어나는 부분을 다 표시해 주었다.
뿐만 아니라, revision이 183으로 올라갔다!!!

<<<<<<< .mine에서부터 ========== 까지가 내가 수정한 부분이고,
=========에서부터 >>>>>> .r183까지가 revision183버전의 상태이다.
(즉, ========를 경계로 어떻게 바꿀지 확인을 하면되는 것이다.)


여기에서는 a의 값은 내가 수정한대로 바꾸고, 주석 부분은 친구가 수정한 부분으로 두고 싶다.
그러면 직접 손으로 그 부분을 수정하면 된다.



이렇게 한 뒤에 Test.java에서 오른 클릭 - Team - Mark Resolved를 누르면 아래와 같은 화면이 뜬다.
여기에서 첫번째를 선택하자.(파일의 충돌을 해결했다는 뜻)


그리고 나서  Package Ex탭을 보면 Test.java의 아이콘에 별표가 뜰 것이다.



이렇게 한 뒤에 Test.java에서 오른 클릭 - Team - Commit을 해보자.
아무런 에러없이 잘 올라갔고 버전도 revision184로 올라간 것을 볼 수 있을 것이다.!!

'프로그래밍 > JAVA' 카테고리의 다른 글

함수의 원자성(atomicity) 보장  (0) 2010.01.11
자바에서 쓰레드를 사용하는 방법  (1) 2010.01.11
직렬화를 할 때 유의해야 할 사항  (0) 2010.01.08
자바 - 직렬화 (Serializable)  (5) 2010.01.07
스택과 힙  (0) 2010.01.06