두 가지 분기에 파일이 추가 된 (SVN 1.6.1 사용) 몇 가지 분기를 병합 할 때 (그리고 별도의 분기에서 작업) 새 트리 충돌 중 하나가 발생합니다.
C foo.txt
> local obstruction, incoming add upon merge
두 가지의 변경 사항이 필요하지만 트리 충돌로 인해 일반적인 .working, .merge-left 및 .merge-right 파일이 제공되지 않습니다. 충돌의 특성으로 인해 이해할 수 있습니다. 이러한 충돌 중 상당수와 각 분기에서 동일한 파일이 삭제 된 충돌이 있지만 해결하기가 쉽습니다.
이 문제를 어떻게 해결할 수 있습니까? SVN redbean 책 (1.6 용)은이 상황을 다루지 않습니다.
답변
“트리 충돌”디자인 문서 의 이전 버전 (2009)에서 언급 한 바와 같이 :
버전이 지정된 파일에 추가 병합으로 인한 XFAIL 충돌
이 테스트는 기존 버전 파일에 기록없이 파일 추가 를 가져 오는 병합을 수행 합니다 .
이것은 ‘local obstruction, incoming add upon merge
‘품종 의 파일에 대한 트리 충돌이어야합니다 . r35341의 예상치를 수정했습니다.
(ClearCase에서는 “evil twins”라고도합니다.) :
파일이 두 개의 다른 분기에서 두 번 생성 (여기서는 두 번 “추가됨”)되어 두 개의 다른 요소에 대해 두 개의 다른 기록을 생성하지만 이름은 같습니다.
이론적 인 해결책은 대상 브랜치 ‘ B2
‘ 에서 이러한 파일을 외부 diff 도구를 사용하여 수동으로 병합하는 것 입니다.
여전히 소스 브랜치에서 작업하는 경우 이상적인 시나리오는 소스 브랜치에서 해당 파일을 제거하고 B1
에서 B2
로 다시 병합 B1
하여 해당 파일을 볼 수 있도록하는 B1
것입니다 (그러면 동일한 요소에서 작업하게됩니다).
병합 만에서 발생하기 때문에 병합 다시 할 수없는 경우 B1
에 B2
, 다음 수동 병합 각각에 대해 필요합니다 B1->B2
병합.
답변
이에 대한 해결책을 제안 하는 게시물을 찾았 습니다 . 곧 실행됩니다.
svn resolve --accept working <YourPath>
로컬 버전 파일을 OK로 주장합니다.
단일 파일 또는 전체 프로젝트 카탈로그에 대해 실행할 수 있습니다.
답변
들어오는 변경 사항이 원하는 변경 사항이면 어떻게됩니까? svn resolve –accept theirs-full을 실행할 수 없습니다.
svn resolve –accept base
답변
위의 user619330의 조언을 따르기 위해 꽤 철저히 노력했습니다. 상황은 다음과 같습니다. (1) : 초기 브랜치 인 branch1에서 작업하는 동안 일부 파일을 추가했습니다. (2) 추가 개발을 위해 새로운 브랜치 인 branch2를 생성하고, 트렁크에서 분기 한 다음 브랜치 1의 변경 사항을 병합합니다. (3) 동료가 브랜치 1에서 자신의 브랜치로 내 모드를 복사하고 추가 모드를 추가했습니다. 그런 다음 다시 트렁크로 병합되었습니다. (4) 이제 트렁크의 최신 변경 사항을 현재 작업 브랜치 인 branch2로 병합하고 싶었습니다. 이것은 svn 1.6.17입니다.
병합은 새 파일과 트리 충돌을 일으켰고, 다른 트렁크에서 새 버전을 원했기 때문에 branch2의 깨끗한 복사본에서 충돌하는 파일을 svn 삭제하고 이러한 branch2 변경 사항을 커밋했습니다 (따라서 임시 문제의 파일이없는 branch2 버전), 트렁크에서 병합했습니다. 나중에 트렁크로 다시 병합하려고 할 때 더 많은 문제가 발생하지 않도록 히스토리가 트렁크 버전과 일치하기를 원했기 때문에 이렇게했습니다. 병합이 잘되었고, 파일의 트렁크 버전을 얻었고, svn st는 모두 확인을 보여주고, 이전에 수행 한 삭제와 병합에서 추가 사이에 변경 사항을 커밋하는 동안 더 많은 트리 충돌을 발생 시켰습니다. svn이 내 작업 복사본 (이제 파일의 트렁크 버전이 있음)을 위해 충돌을 해결하고 커밋했습니다.
음 … 아니. branch2의 다른 복사본을 업데이트하면 이전 버전의 파일이 생성되었습니다 (트렁크 이전 병합). 이제 두 개의 서로 다른 작업 복사본을 가지고 있는데, 같은 버전으로 업데이트 된 것으로 추정되며 두 가지 다른 버전의 파일이 있으며 둘 다 완전히 최신 상태라고 주장합니다! branch2의 깨끗한 사본을 체크 아웃하면 이전 (트렁크 이전) 버전의 파일이 생성되었습니다. 수동으로 트렁크 버전으로 업데이트하고 변경 사항을 커밋하고 첫 번째 작업 복사본 (원래 트렁크 변경 사항을 제출했던)으로 돌아가서 업데이트를 시도한 다음 문제가되는 파일에 체크섬 오류가 발생합니다. 문제의 디렉토리를 날려 버리고 업데이트를 통해 새 버전을 얻으십시오. 마지막으로 트렁크 변경으로 좋은 버전의 branch2가되어야합니다. 나는 희망. 주의 사항 개발자.