2012-06-06 4 views
0

저는 1 년에 걸쳐 별도로 관리되는 두 개의 분기가 있는데, 분기 A와 B입니다. 이제 다른 분기로 병합해야합니다. 내가 원했던 것은 양쪽 모두의 변화를 비교 한 다음 더 최근의 변화가 합병 된 지점으로 들어가는 것입니다.두 분기의 병합을 병합합니다.

나는 과거에 SVN 병합을 사용 했었지만, 내가 이해할 수있는 방식은 한 지점에서 다른 지점에 'diffs'를 적용한다는 것입니다. 나는 모든 diffs - 오직 그것보다 새로운 것을 원하지 않는다.

SVN에서 이것을 수행 할 수 있습니까?

감사합니다.

답변

0

병합은 3 방향 병합을 수행합니다. 이것은 다음과 같이 작동하는 표준 알고리즘입니다.

  • 가장 최근의 공통 조상 또는 기본 수정본이 있습니다. 이것은 분기가 만들어지기 직전의 개정판이나 한 버전에서 다른 버전으로 병합 된 마지막 개정판입니다.
  • 'mine'(체크 아웃 한 항목)이 'base'로 같지만 'theirs'(병합 할 인수)가 다른 각 행에 대해 'theirs'에서 사용됩니다.
  • 'theirs'가 'base'와 동일한 각 행에 대해 로컬 버전이 사용됩니다 (기본 버전에서 변경되지 않은 경우 포함).
  • 'mine'과 'theirs'에서 동일한 각 행에 대해 '기본'이 무엇이든 그 버전이 사용됩니다.
  • 'base', 'mine'및 'theirs'의 세 줄마다 다른 줄마다 충돌이 발생하여 수동으로 해결해야합니다.

이렇게 두 분기의 모든 변경 사항이 적용됩니다. 동일한 변경이 적용된 것보다 양쪽에서 수행 된 경우. 동일한 코드가 다른 방식으로 변경되면 충돌이 발생하고이를 해결해야합니다. 그리고 당신은 어떤 특정한 개정판이 어디에서 왔는지 보지 못할 것입니다.

이제 원하지 않는 옵션이 있다면 병합 할 리비전을 수동으로 나열하는 것입니다. 이것은 특정 개정판에서 한 번에 한 번에 각 연속 범위의 변경 사항을 적용합니다 (알고리즘은 실제로 동일하지만 기본은 선택한 범위의 시작 전에 개정입니다). 즉, 원하는 변경 사항을 직접 선택해야합니다. 이 접근 방식에는 두 가지 문제가 있습니다. 많은 작업이 필요하며 나중에 변경하기 위해 필요한 모든 변경 사항을 선택해야합니다.

이제 모든 "새로운"변경 사항을 원하십시오. 컴퓨터가 이해할 수있는 방식으로 어떤 의미인지 정의해야합니다. 그리고 위의 두 번째 문제인 —에주의해야합니다. 변경 사항은 서로 다를 수 있으므로 종속 된 변경 사항을 선택해야합니다.

관련 문제