2010-01-07 5 views
23

최근에 나는 매우 이상한 Subversion의 동작을 접했습니다.SVN과 트리 충돌을 해결할 수 없습니다

방금 ​​지사의 로컬 복사본을 원격 지사와 병합했습니다. 모든 것이 부드럽게 진행되었지만 1 개의 트리 충돌 (로컬 삭제, 원격 업데이트)이 발생했습니다.

좋아, 내가 작업 복사본을 적절하게 수정하고 "svn resolve --accept = working -R."을 실행했다고 생각했습니다.

Subversion이 내 문제를 해결했으며 "svn st"는 더 이상 문제를 나타내지 않는다고 전했습니다. 그래서, 나는 커밋을 시도했지만 svn 내 폴더 중 하나 (내 충돌 한 안쪽)가 오래되었고 svn을 제안했지만 충돌로 다시 폴더를 만들었습니다!

이 비열한 서클에서 벗어나려면 어떻게해야합니까?

+0

가 답변을 검토하고 SVN가 작동하지 않을 때 나는 :( – FlipMcF

답변

8

이것은 도움이 될 수도 있지만 도움이되지 않을 수도 있지만 때로는 "svn 정리"로 인해 이상한 메타 데이터 문제가 해결 될 수 있습니다. 깨끗한 작업 복사본을 체크 아웃하면 깨끗한 복사본에도 같은 문제가 있습니까? 그렇다면 이전 대답이 올바른 방향의 한 단계처럼 들립니다.

+0

아, 고마워, 내가 정리를 잊어 버렸어 ... 이걸 시험해 볼 필요가있어. – Anton

5

당신은 svn의 해결 명령보다는 다른 방법을 사용할 수 있습니다

  1. 는 충돌 파일의 패치를 만듭니다. (또는 svn의 수출과 충돌 폴더의 버전 ... 백업)
  2. 업데이트 저장소 (SVN 업데이트)
  3. 이전에 수행 된 패치를 적용 (또는 백업과 충돌하는 파일/폴더 교체)
  4. 변경 사항 적용 (svn commit)
+0

을 수용 할 수 있습니다 : 오류없이 정상으로 돌아

svn revert -R . 

, 일반적으로 .svn 폴더가 망가져 있음을 의미합니다 .Svn 정리 명령을 사용하면 도움이되지만 매번이 방법을 사용하므로 절대로 작동하지 않습니다. (슬픈).이 게시물을 "수락 된 대답"으로 표시하는 것을 잊지 마십시오. 그것은 작동한다 (그렇지 않으면이 질문은 여전히 ​​대답이없는 채로 남아있을 것이다) – Anton

+1

으로 끝날했습니다 실제로 무엇을 그 다른 대답 – Phong

0

병합을 수행 할 때 폴더를 업데이트하지 않았거나 병합하기 전에 어딘가에 충돌이 있었던 것 같습니다. 문제를 해결하려면 트렁크 (대상 폴더)를 이전 버전으로 되돌려 야합니다. 그런 다음 해당 폴더에서 정리를 실행하십시오. 그런 다음 분기 폴더 (원본 폴더)에서 정리를 실행하십시오. 그런 다음 두 폴더를 다시 업데이트하십시오. 워크 플로에서 빨간색 줄이 표시되면 먼저 해당 파일을 되돌리고 원하는 상태로 가져와야합니다. 그런 다음 폴더를 업데이트하십시오 (예, 다시 한 번). 마지막으로 병합을 다시 수행하십시오.

41
~/sandbox/jabira > svn resolve --accept=theirs-full testClient/ 
svn: warning: Tree conflicts can only be resolved to 'working' state; 'testClient' not resolved 

~/sandbox/jabira > svn resolve --accept=working testClient/ 
Resolved conflicted state of 'testClient' 

희망이 도움

+1

도움이되었습니다. 나는 svn에서 경고 메시지를 잘못 해석하는 것이 쉽다는 것을 알았습니다. svn은 엉망입니다. 사실 그것은이 경우 무엇을해야하는지에 대한 지시입니다. –

0

이 날 모든 로컬 변경을 포기하고 서버 저장소에서 파일을 이동하는 일 것입니다 :

svn update --accept theirs-full 

svn resolve --accept theirs-full <pathname> 

이 메시지가 나타납니다 : W155027 : 나무 충돌

직관적이지 못한 다음 단계이지만 실제로 catch-22를 자른다. :

svn resolve --accept=working <pathname> 

모든 "작동하는"변경을 재귀 적으로 되돌립니다. 이것은 모든 나의 지방의 변경을 undid했다.

svn update