Dear Wiki user, You have subscribed to a wiki page or wiki category on "Subversion Wiki" for change notification.
The "SymmetricMerge" page has been changed by JulianFoad: http://wiki.apache.org/subversion/SymmetricMerge?action=diff&rev1=78&rev2=79 Comment: Fix an error in "natural history" in criss-cross merge case #3, found by stefan2. OTOH, when the subtree contains some changes, but other changes exist outside it, that's ''significant'' subtree merge. - === Example === - Consider the following mergeinfo catalog: + . ^/branch: /trunk:100-110 ^/branch/A/B: /trunk/B:101-104 ^/branch/A/C: /trunk/C:104-107 - ^/branch: /trunk:100-110 - ^/branch/A/B: /trunk/B:101-104 - ^/branch/A/C: /trunk/C:104-107 The merge 'svn merge ^/trunk@110 (into ^/branch)' would break the merge into the following ranges: [100], [101-103], [104], [105-107], [108-110]. Each range would be treated independently, and an actual merge will only be attempted on the subtrees that do not indicate they have already been merged that range. (For example, the [101-103] range would not be merged into the ^/branch/B subtree. It would be merged into its parents and siblings, though, just as with 'svn up --set-depth=exclude B && svn merge -c 101:103 --disregard-mergeinfo'.) - == Cherry-pick Merges == [Note: This section is rather long, and should be considered more as reference material than an introduction, as it aims to set out all the possible cases.] @@ -287, +282 @@ If we pick base A1: * Candidate changes are { A2 }. - * Target natural history is { B1,B2 }; target mergeinfo is { A1 }. + * Target natural history is { B1, B2 }; target mergeinfo is { A1 }. * Notice candidate A2 can be skipped because it represents a logical change (B1) that is already in the target branch's natural history. * Skip A2 from the source ranges. * Update the mergeinfo on B. (See "Recording Mergeinfo for Skipped Changes".) @@ -296, +291 @@ If we pick base B1: * Candidate changes are { B1:A2 }. - * Target natural history is { B1,B2 }; target mergeinfo is { A1 }. + * Target natural history is { B1, B2 }; target mergeinfo is { A1 }. * Notice candidate B1:A2 can be skipped because it represents a logical change (A1) that is already recorded as merged into the target branch. * Skip B1:A2 from the source ranges. * Update the mergeinfo on B. (See "Recording Mergeinfo for Skipped Changes".) @@ -312, +307 @@ If A1 were picked as base: * Candidate changes are { A2, A3 }. - * Target natural history is { B1,B3 }; target mergeinfo is { A1 }. + * Target natural history is { B1, B3 }; target mergeinfo is { A1 }. * Notice candidate A3 can be skipped because it represents B1, as before. * Merge just A2 to B. * Update the mergeinfo on B. (See "Recording Mergeinfo for Skipped Changes".) @@ -321, +316 @@ If B1 were picked as base: * Candidate changes are { B1:A3 }. - * Target natural history is { B1,B2 }; target mergeinfo is { A1 }. + * Target natural history is { B1, B2 }; target mergeinfo is { A1 }. * Notice candidate B1:A3 represents logical changes { A1, A2 }. A1 is already on B; A2 isn't. Therefore we can neither merge nor skip this change. * Bail out, telling the user there's a problem. @@ -339, +334 @@ If A1 were picked as base: * Candidate changes are { A2, A3 }. - * Target natural history is { B1,B2 }; target mergeinfo is { A1 }. + * Target natural history is { B1, B2, B3 }; target mergeinfo is { A1 }. * Notice candidate A3 can be skipped because it represents B1, as before. * Merge just A2 to B. If B1 were picked as base: * Candidate changes are { B1:A3 }. - * Target natural history is { B1,B2 }; target mergeinfo is { A1 }. + * Target natural history is { B1, B2, B3 }; target mergeinfo is { A1 }. * Notice candidate B1:A3 represents logical changes { A1, A2 }. A1 is already on B; A2 isn't. Therefore we can neither merge nor skip this change. * Bail out, telling the user there's a problem.
