JDime (Java diff and merge) is a three-way merge tool for the Java programming language. It aims at finding a balance between precision and performance. In practice, developers use unstructured (i.e., line-based) merge tools, which are fast but imprecise. In academia, many approaches incorporate information on the structure of the artifacts being merged. While this increases precision in conflict detection and resolution, it can induce severe performance penalties. Striving for a proper balance between precision and performance, JDime uses a structured-merge approach with auto-tuning. In a nutshell, JDime tunes the merge process on-line by switching between unstructured and structured merge, depending on the presence of conflicts. Our experiments with 8 real-world Java projects, involving 72 merge scenarios with over 17 million lines of code, demonstrate that JDime indeed hits a sweet spot: While largely maintaining a precision that is superior to the one of unstructured merge, structured merge with auto-tuning is up to 12 times faster than purely structured merge, 5 times on average.
This site contains the tool JDime as well as the results of an empirical study on structured and unstructured merge with regard to their performance and capabilities to detect and resolve merge conflicts. The two merge approaches, the tool JDime, and the empirical study are described in detail in the Master's thesis of the second author.
Current stable version
The current sources of JDime, as well as its installation instructions, are hosted at GitHub. Use this version if you want to try JDime.
Old version used for the evaluation in the paper
The distribution contains a binary (jar file) with the merge tool, sample projects that we used to evaluate our approach (examples), scripts to analyze the output of the merge tool (evaluation), and a master's thesis describing the approach.
See the tools' GitHub page for requirements, installation instructions, and usage.
Here, we list all sample projects that we used to test JDime and to compare unstructured and structured merge. In total, we based our study on 8 software projects written in Java.
Each software project comprises seven to ten merge scenarios (triples of versions to merge). Each merge scenario contains three folders, one for each version (first, base, second).
In total, we based our study on 50 software projects written in Java, all available on GitHub.
Each software project comprises five to ten merge scenarios (triples of versions to merge). Each merge scenario contains three folders, one for each version (first, base, second).
Below, we provide a set of diagrams containing information on the number of conflicts, conflicting lines of code, conflicting files, and the runtime of the respective merge scenario. Details on the experimental setup are available in the Master's thesis of the second author.
All results and diagrams were computed with statistics tool R.