문제

내 트렁크에 기능 브랜치가 있고 주기적으로 트렁크의 변경 사항을 브랜치에 병합했는데 모든 것이 잘 작동했습니다.오늘 나는 브랜치를 다시 트렁크에 병합하려고 했고, 브랜치를 생성한 후 내 트렁크에 추가된 모든 파일은 "트리 충돌"로 표시되었습니다.앞으로 이런 일을 피할 수 있는 방법이 있나요?

나는 이것이 제대로 표시되고 있다고 생각하지 않습니다.

도움이 되었습니까?

해결책

나는 게리가 준 링크를 읽는 해결책을 발견했다 (그리고 나는 이런 식으로 따르는 것이 좋습니다).

트리 충돌을 해결하기 위해 요약 작업 디렉토리를 커밋합니다 SVN Client 1.6.x를 사용하면 사용할 수 있습니다.

svn resolve --accept working -R .

어디 . 분쟁의 디렉토리입니다.

경고: "작업 디렉토리 커밋"은 샌드 박스 구조가 귀하가 커밋하는 구조가 될 것이라는 것을 의미하므로 예를 들어 샌드 박스에서 일부 파일을 삭제 한 경우 저장소에서 삭제됩니다. 이것은 충돌 디렉토리에만 적용됩니다.

이런 식으로, 우리는 SVN에게 갈등을 해결하도록 제안하고 있습니다 (--resolve), 샌드 박스 내부의 작업 사본을 수락합니다 (--accept working), 재귀 적 (-R), 현재 디렉토리에서 시작하여 (.).

TortoisesVN에서 오른쪽 클릭에서 "해결 된"을 선택하면 실제로이 문제를 해결합니다.

다른 팁

전복 1.6 디렉토리 수준에서 충돌을 다루기 위해 트리 충돌이 추가되었습니다. 좋은 예는 파일을 로컬로 삭제할 때 업데이트가 해당 파일의 텍스트 변경을 가져 오려고 시도합니다. 또 다른 하나는 편집중인 파일의 전복 이름 바꾸기를 할 때입니다.

Collabnet의 Subversion 블로그에는 훌륭한 기사가 있습니다 나무 충돌.

내 경험상 SVN은 폴더를 삭제할 때마다 트리 충돌을 만듭니다. 이유가없는 것 같습니다.

나는 내 코드에서 작업하는 유일한 사람입니다 -> 디렉토리 삭제 -> 커밋 -> 충돌!

전환하기를 기다릴 수 없습니다 git.

나는 명확히해야한다 - 나는 사용한다 하위 클립. 아마 문제 일 것입니다! 다시, 나는 전환을 기다릴 수 없다 ...

이것이 당신에게 일어나고 있는지는 모르겠지만, 때로는 잘못된 디렉토리를 선택하고 모든 파일이 완전히 잘 보이지만이 오류가 발생합니다.

예시:

병합/svn/project/branch/some-branch/sources to/svn/project/trunk ---> 트리 충돌

병합/svn/project/branch/some-branch to/svn/project/trunk ---> OK

이것은 어리석은 실수 일지 모르지만, 그것이 더 복잡하다고 생각하기 때문에 항상 분명하지는 않습니다.

여기서 일어나는 일은 다음과 같습니다. 트렁크에 새 파일을 만들면 지점에 병합됩니다. 병합에서 커밋이 파일은 분기에서도 생성됩니다.

지점을 트렁크로 다시 병합 할 때 SVN은 다시 똑같이 수행하려고 시도합니다. 파일이 분기에서 생성 된 것을보고 Merge Commit의 트렁크에서 만들려고하지만 이미 존재합니다! 이것은 나무 충돌을 만듭니다.

이것을 피하는 방법은 특별한 병합을하는 것입니다. 재 통합. 당신은 이것을 달성 할 수 있습니다 --reintegrate 스위치.

문서에서 이것에 대해 읽을 수 있습니다.http://svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate

그러나 지점을 트렁크로 다시 병합 할 때 근본적인 수학은 상당히 다릅니다. 기능 지점은 이제 복제 된 트렁크 변경 사항과 개인 브랜치 변경 사항이 모두 엉망이므로 복사 할 간단한 연속 수정 범위가 없습니다. -reintegrate 옵션을 지정하면 전복에 분기에 고유 한 변경 사항 만 신중하게 복제하도록 요청합니다. (사실, 그것은 최신 트렁크 트리를 최신 지점 트리와 비교하여이를 수행합니다. 결과적인 차이는 정확히 지점이 변경됩니다!)

분기를 다시 통합 한 후에는 제거하는 것이 좋습니다. 그렇지 않으면 다른 방향으로 병합 될 때마다 트렁크에서 가지로 계속됩니다. (이전에 설명한 것과 정확히 같은 이유로.)

이것에 대한 방법도 있지만 나는 그것을 시도하지 않았습니다. 이 게시물에서 읽을 수 있습니다. v1.6의 전복 분기 재 통합

동일한 버전 클라이언트를 사용하지 않아서 발생할 수 있습니다.

버전 1.5 클라이언트와 동일한 저장소를 향한 버전 1.6 클라이언트를 사용하면 이러한 종류의 문제가 발생할 수 있습니다. (나는 방금 물었다.)

파일 근처에 편집/삭제/오지 않기 때문에 의미가없는 트리 충돌을 만나면 Merge 명령에 오류가 발생했을 가능성이 높습니다.

일어날 수있는 일은 이전에 이미 현재 합병에 포함 된 많은 변경 사항을 병합 한 것입니다. 예를 들어, 트렁크에서 누군가가 파일을 편집 한 다음 나중에 이름을 바꿨습니다. 첫 번째 병합에 편집을 포함한 다음 두 번째 병합에 편집 및 이름 바꾸기 (본질적으로 제거)를 모두 포함하면 트리 충돌도 제공합니다. 그 이유는 이전에 병합 된 편집이 자신의 것으로 나타나기 때문에 제거가 자동으로 수행되지 않기 때문입니다.

이것은 최소한 1.4 리포지토리에서 발생할 수 있습니다. 1.5로 도입 된기구가 여기서 도움이되는지 확실하지 않습니다.

나는 오늘도 이 문제를 겪었지만, 내 특정 문제는 아마도 귀하의 문제와 관련이 없을 것입니다.파일 목록을 조사한 후 내가 무엇을 했는지 깨달았습니다. 즉, 일시적으로 한 어셈블리의 파일을 다른 어셈블리의 파일을 사용하고 있었던 것입니다.나는 그것에 많은 변경을 했고 SVN 기록을 고아로 만들고 싶지 않았기 때문에 내 브랜치에서 다른 어셈블리 폴더에서 파일을 옮겼습니다.이는 SVN에서 추적되지 않으므로 파일이 삭제된 후 다시 추가된 것처럼 보입니다.이로 인해 트리 충돌이 발생합니다.

파일을 다시 이동하고 커밋하여 문제를 해결했습니다. 그 다음에 내 지점을 병합합니다.그런 다음 나중에 파일을 다시 옮겼습니다.:) 그게 효과가 있는 것 같았습니다.

나는 비슷한 문제가 있었다. 실제로 나를 위해 일한 유일한 것은 충돌하는 하위 부사를 다음과 같이 삭제하는 것입니다.

svn delete --force ./SUB_DIR_NAME

그런 다음 작업 사본의 다른 루트 디렉토리에서 다시 복사하십시오.

svn copy ROOT_DIR_NAME/SUB_DIR_NAME

그럼

svn cleanup

그리고

svn add *

마지막으로 경고를받을 수도 있지만 무시하고 마지막으로

svn ci .

나는이 같은 문제가 있었고 사용을 사용하여 병합을 다시 사용하여 해결했습니다. 이 지침. 기본적으로 SVN의 "2-URL Merge"를 사용하여 업데이트합니다. trunk 역사와 나무 갈등에 대해 많은 것을 방해하지 않고 지점의 현재 상태에. 114 개의 트리 충돌을 수동으로 고정하지 못하게했습니다.

나는 그것이 역사를 보존하는지 확실하지 않지만 내 경우에는 그만한 가치가있었습니다.

때때로 들어가는 시나리오 :

릴리스 브랜치를 만든 트렁크가 있다고 가정하십시오. 트렁크에서 일부 변경 사항 (특히 "Nove-Dir"디렉토리 생성) 후에 나중에 릴리스 브랜치로 병합하려는 기능/수정 브랜치를 만듭니다 (변경 사항이 적고 기능/수정이 릴리스에 중요하기 때문에). .

trunk -- ... -- create "some-dir" -- ...
     \                                  \-feature/fix branch
      \- release branch

그런 다음 기능/수정 브랜치를 릴리스 브랜치로 직접 병합하려고하면 트리 충돌이 발생합니다 (디렉토리가 기능/수정 분기에도 존재하지 않더라도).

svn status
!     C some-dir
      >   local missing or deleted or moved away, incoming file edit upon merge

따라서 기능/수정 브랜치를 병합하기 전에 "Node-Dir"디렉토리를 생성 한 기능/수정 브랜치를 작성하기 전에 트렁크에서 수행 된 커밋을 명시 적으로 병합해야합니다.

나는 종종 그것이 git에서 필요하지 않기 때문에 잊어 버린다.

오늘까지 3 개월 전 이후로, 나는 지점을 트렁크에 다시 병합하려고 시도 할 때 정기적으로 수백 개의 나무 갈등을 겪었습니다 (사용 TortoisesVN 1.11). Rebased 여부에 관계없이 BTW. 나는 2004 년에 V1 이후로 TortoisesVN을 사용해 왔으며 항상 가지를 다시 통합하는 데 사용했습니다. 최근에 무슨 일이 있었을까요?

그래서 오늘 나는이 간단한 실험을 실행했고, 나는이 미친 갈등을 만들어내는 것을 발견했다.

  1. 나는 트렁크를 @393으로 내렸다.
  2. 나는 수십 개의 파일을 무작위로 수정하고 새로운 파일을 만들었습니다.
  3. 나는 헌신했다. 이제 @395 (동료는 자신의 물건을 공연하기 위해 394에 포크를 탔습니다).
  4. 그런 다음 가지를 트렁크로 다시 통합하려고 시도했습니다. 마법사에서 TortoisesVN의 권고에 따라 : "모든 개정 (재 통합)을 병합하려면 해당 상자를 비워 두십시오." 이를 달성하기 위해 트렁크 폴더를 마우스 오른쪽 버튼으로 클릭하고 "TortoisesVn> Merge,/Path/To/Branch"를 선택했습니다. Rev Range를 비워 두었습니다, 대화 상자에서 조언 한 바와 같이.

논의: (첨부 파일을 참조)

모든 개정... 어떤? 나는 거의 알지 못했다 고객이 "목표의 모든 수정! (Trunk) ", 그 지점을 통합하는 과정에서 나는"1- 헤드 합병 합병 "을 보았습니다. 하나님을 위해 출생 증명서를 읽었습니까? this is why so many conflicts occurred: SVN-cli is going on a foolish spree from revision 1

해결:

  1. Wiz가 조언 한 것과는 달리, 지점의 삶의 모든 개정을 다루는 범위를 지정하십시오! 그러므로, 394 헤드;
  2. 이제 그 합병 테스트를 다시 실행하고 시가를 받으십시오. (see second attachment).

도의적인:왜 그들이 여전히 그 버그를 고쳐지지 않았는지 이해할 수 없습니다. 왜냐하면 그것은 하나이기 때문입니다. 죄송합니다. 나는 이것을 그들과 함께보고하기 위해 시간을 내야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top