Understanding differences between those so similar
Git and Mercurial have different ways to determine the correct ancestor when performing a merge operation. Graft operations use yet another way to determine the ancestor. In the built-in line-based algorithm, the underlying diff3 process is then used. This diff3 algorithm accepts non-conflicting changes and relies on the user to resolve conflicts. We will examine the details of this process and suggest that the symmetrical treatment that diff3 uses is appropriate for merge but not necessarily optimal for the graft operation.
In this paper we look at examples of tree-based structures such as XML and JSON to show how different approaches are appropriate for merge and graft.
Download this conference paper to:
Understand the fundamental differences between merge and graft.
Understand how results can differ when finding change depending on the method you’re using.
Review the advantages of XML for rule-based conflict resolution.
“Merge tools are, usually, line-based tools that treat the files as a sequence of lines but they have no understanding of any syntactic structure that may be present.”
Merging XML documents is a particularly tricky operation but is often required to consolidate or synchronise two or more independent edit paths or versions. As XML tools become more powerful, the possibility of achieving an intelligent merge of XML data sets become reality.
It’s common to have data in two files that we need to merge together, two different people or two different processes have made changes. Does it matter who or what has made this change? This question might help to decide whether you need a 2-way or 3-way merge.