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.
DeltaXML and DeltaJSON products look within the structure of your data to identify relevant differences, so you can diagnose, debug and process data efficiently.
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.