subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache subversion Wiki <>
Subject [Subversion Wiki] Update of "SvnMergeTheory" by JulianFoad
Date Mon, 13 Feb 2012 15:30:09 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Subversion Wiki" for change notification.

The "SvnMergeTheory" page has been changed by JulianFoad:

  == Background on 3-way merging ==
  The following sections assume that the reader understands how the diff3 algorithm works.
The diff3 algorithm is used to perform a merge between an original version of a file and two
different versions of the file, each derived from the original version (in Subversion, the
derived versions are often referred to as "mine" and "theirs"). This paper provides an explanation
and an analysis of the diff3 algorithm:
  == Playing catch-up with Sync and Reintegrate ==
@@ -65, +64 @@

  More significantly, neither does the mergeinfo "B:1-4" accurately describe the set of ''physical
changes'' that were merged.  The physical (3-way) merge took the difference between A2 and
B4, which we can describe as A2:B3 followed by B3:B4.  The second part (B3:B4) we can descibe
in mergeinfo syntax as "B:4".  The first part, A2:B3, we can't describe using mergeinfo syntax.
 Logically it's equivalent to changes B1 and B2, but it's not physically the same, because
A2:B3 is the rewriting of B1 and B2 into the context of branch A.  (See [[#The_Two_Sides_of_a_Merge|The
Two Sides of a Merge]], below, for clarification.)
  == Cherry-pick Merges ==
+ If a cherry-pick merge has occurred since the last complete (sync or reintegrate) merge,
the next complete merge should, loosely speaking, skip it.  We can classify such a cherry-pick
by its position and direction:
+ [GRAPH: 3 kinds + the really-a-sync kind]
  === Sync with Cherry-Pick in Same Direction ===
  Subversion's ''sync'' merge handles cherry-picks in the same direction by skipping over
them, splitting the merge into two or more phases, with each phase performing a 3-way merge
of one sub-range of the requested source range.

View raw message