Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I do not use Subversion myself, but from the <a href="http://subversion.apache.org/docs/release-notes/1.5.html#merge-tracking" rel="nofollow noreferrer">release notes for Subversion 1.5: Merge tracking (foundational)</a> it looks like there are the following differences from how merge tracking work in full-<a href="https://en.wikipedia.org/wiki/Directed_acyclic_graph" rel="nofollow noreferrer">DAG</a> version control systems like Git or Mercurial.</p> <ul> <li><p>Merging trunk to branch is different from merging branch to trunk: for some reason merging trunk to branch requires <code>--reintegrate</code> option to <code>svn merge</code>.</p> <p>In distributed version control systems like Git or Mercurial there is no <em>technical</em> difference between trunk and branch: all branches are created equal (there might be <em>social</em> difference, though). Merging in either direction is done the same way.</p></li> <li><p>You need to provide new <code>-g</code> (<code>--use-merge-history</code>) option to <code>svn log</code> and <code>svn blame</code> to take merge tracking into account.</p> <p>In Git and Mercurial merge tracking is automatically taken into account when displaying history (log) and blame. In Git you can request to follow first parent only with <code>--first-parent</code> (I guess similar option exists also for Mercurial) to "discard" merge tracking info in <code>git log</code>.</p></li> <li><p>From what I understand <code>svn:mergeinfo</code> property stores per-path information about conflicts (Subversion is changeset-based), while in Git and Mercurial it is simply commit objects that can have more than one parent.</p></li> <li><p><em>"Known Issues"</em> subsection for merge tracking in Subversion suggests that repeated / cyclic / reflective merge might not work properly. It means that with the following histories second merge might not do the right thing ('A' can be trunk or branch, and 'B' can be branch or trunk, respectively): </p> <pre> *---*---x---*---y---*---*---*---M2 &lt;-- A \ \ / --*----M1---*---*---/ &lt;-- B </pre> <p>In the case the above ASCII-art gets broken: Branch 'B' is created (forked) from branch 'A' at revision 'x', then later branch 'A' is merged at revision 'y' into branch 'B' as merge 'M1', and finally branch 'B' is merged into branch 'A' as merge 'M2'. </p> <pre> *---*---x---*-----M1--*---*---M2 &lt;-- A \ / / \-*---y---*---*---/ &lt;-- B </pre> <p>In the case the above ASCII-art gets broken: Branch 'B' is created (forked) from branch 'A' at revision 'x', it is merged into branch 'A' at 'y' as 'M1', and later merged again into branch 'A' as 'M2'.</p></li> <li><p>Subversion might not support advanced case of <a href="http://revctrl.org/CrissCrossMerge" rel="nofollow noreferrer">criss-cross merge</a>.</p> <pre> *---b-----B1--M1--*---M3 \ \ / / \ X / \ / \ / \--B2--M2--* </pre> <p>Git handles this situation just fine in practice using "recursive" merge strategy. I am not sure about Mercurial.</p></li> <li><p>In <em>"Known Issues"</em> there is warning that merge tracking migh not work with file renames, e.g. when one side renames file (and perhaps modifies it), and second side modifies file without renaming (under old name).</p> <p>Both Git and Mercurial handle such case just fine in practice: Git using <strong>rename detection</strong>, Mercurial using <strong>rename tracking</strong>.</p></li> </ul> <p>HTH</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload