Introduction

Software merge is a central task of version control system-guided development: two developers create their own versions by deriving it from a common ancestor version; then these two versions evolve independently by either adding new functionalities or fixing previous issues; finally these two versions are merged again. In a three-way merge scenario, the two versions to be merged are called the left version and the right version, and their common ancestor is called the base version. The base, left and right versions form a three-way merge scenario. If the base version is unavailable, then it is called a two-way merge scenario. AutoMerge is mainly focus on three-way merge, but it also supports two-way merge.

When concurrent changes contradict each other in the left and right versions, conflicts are reported according to the basic rules of three-way merge. Existing merge tools do not attempt to resolve conflicts and leave the problems for developers to manually handle them. AutoMerge is designed to provide the developer with a variety of useful candidate resolutions, which we believe is valuable and practical in real-world software development.

AutoMerge is built on the top of JDime, a state-of-the-art structured merge tool. Our Version Space Algebra (VSA) technique is realized as an additional functionality over JDime. When structured merging reports conflicts in a three-way merge scenario, our approach is then activated.