Literature Review
We bring a summary of related works here.
Balancing Precision and Performance in Structured Merge \citep{Le_enich_2014}
There is a trade-off between performance (unstructured merge) and precision (structured merge) and this paper aim to find an optimal solution between them. A structured merge is proposed by authors that can switch between unstructured and structures merge by auto-tuning in an online fashion. If there is not ant conflict in the code, it uses unstructured merge. But in the case of finding a conflict, it switches to structures search to have higher precision. The proposed method is implemented for Java code and released under the title of JDIME. Experiments are performed on 50 real-world java projects and by preserving the precision, the proposed method is 10 times faster in average than structures merge.
Semistructured Merge: Rethinking Merge in Revision Control System \cite{Apel_2011}
Unstructured merge considers the lines of code to combine two versions of one code while structures merge aim to merge them by considering further information - as a tree - from the specific programming language and bring expressiveness to merging. This paper aims to find a proper point in the middle and bring expressiveness to the merge while preserving it general. Most of the unresolved conflicts are renaming conflicts which can be detected easily since the orders are permuted safety most of the programming languages. In this paper, specific merge handlers are added to grammar to define rules for merging. For instance, the order of methods is not important in Java. Therefore, if two different methods are added id different branches, this method simply add both of them. The authors comprehensively investigate the merge conflicts and found out that the large portion of merge conflicts are renaming conflicts. Using language-specific knowledge give the capability of handling such conflicts to their code and besides, its performance is still acceptable. The proposed method is implemented in C#, Java, and Python. Also, adding new languages is also easy.
Evaluating and Improving Semistructured Merge \cite{Cavalcanti_2017}