You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by Apache subversion Wiki <co...@subversion.apache.org> on 2012/06/13 11:38:10 UTC

[Subversion Wiki] Update of "SymmetricMerge" by JulianFoad

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=91&rev2=92

Comment:
Define more terms in the Terminology section.

  Of course, while in theory the result is independent of which branch is the source and which is the target, in practice the merge may give different results.  For example, if changes A2 and B2 both add some lines at the same place in a certain file, then perhaps the 3-way merge tool (or the user, for whom the tool is just a tool) will choose to put the source-branch lines before the target-branch lines in the result.  In such ways, the result may differ.  But notice that, using a suitable 3-way merge tool and/or user input, the result could be guaranteed identical.
  
  == Terminology ==
-  complete merge:: A merge that merges all the changes from the source branch that have not yet been merged into the target. A ''sync'' merge and a ''reintegrate'' merge and a ''symmetric'' merge are all ''complete'' merges.
+  sync merge:: In this Wiki page, I use "sync merge" to mean a ''complete merge'' in which the ''base node'' is on the source branch.  Outside this Wiki page, "sync merge" may be used more generally to mean any ''complete merge''.   In svn 1.7, this is obtained by specifying "svn merge" without the "--reintegrate" option and without any minimum revision number and without any of the conditions or options that would prevent merge tracking.
+  reintegrate merge:: A ''complete merge'' in which the ''base node'' is on the target branch: that is, one that is in the opposite direction from the previous ''complete merge''.  In svn 1.7, this is obtained by specifying "svn merge" with the "--reintegrate" option.
+  complete merge:: A merge that merges all the changes from the source branch (up to the current head, or up to some specified maximum revision) that have not yet been merged into the target branch.  This is in contrast to a ''cherry-pick'' merge.  A ''complete merge'' is always a ''forward merge''.  A ''sync'' merge and a ''reintegrate'' merge and a ''symmetric'' merge are all ''complete'' merges.
   symmetric merge:: A ''complete merge'' that works in either direction between two branches, no matter which branch is regarded as the parent and which as the child, and no matter which direction any previous merges between those branches were performed.  A ''complete merge'' is the normal kind of merge in systems such as ClearCase; this paper is about developing such a merge in Subversion.
+  cherry-pick merge:: A merge that leaves a gap in the series of changes that have been merged from the source branch.  This is obtained by specifying a minimum revision number.   This is in contrast to a ''complete'' merge.   It can be a ''forward'' or a ''reverse merge''.  A ''cherry-pick'' merge does not necessarily ignore mergeinfo; in svn 1.7, the default behaviour of a ''forward'' cherry-pick merge is to use mergeinfo to omit any of the specified revisions that have already been merged.
+  forward merge:: A merge that applies a pre-existing change again in the same sense.  Symmetric merging is only concerned with ''forward merges''.  Contrast with a ''reverse merge''.<<BR>>
+ 
+  reverse merge:: A merge that applies the inverse of a pre-existing change.  Symmetric merging is not concerned with reverse merges.  Merge tracking does not fully track reverse merges comprehensively; it only tracks whether a branch is currently considered to "have" a given change.  The opposite of a ''forward merge''.  Note that a single "svn merge" command can apply a mixture of ''forward'' and ''reverse merges''.<<BR>>
+ 
   natural history:: The sequence of path-revision coordinates where a node existed, if you trace it back through history along its normal changes and any copy-from links. Nothing to do with merge arrows.
  
  == Drawing The Graphs ==