Developers create software branches for tentative feature addition and bug fixing, and periodically merge branches to release software with new features or repairing patches. When the program edits from different branches textually overlap (i.e., textual conflicts), or the co-application of those edits lead to compilation or runtime errors (i.e., compiling or dynamic conflicts), it is challenging and time-consuming for developers to eliminate merge conflicts. Prior studies examined %the popularity of merge conflicts and how conflicts were related to code smells or software development process; tools were built to find and solve conflicts. However, some fundamental research questions are still not comprehensively explored, including (1) how conflicts were introduced, (2) how developers manually resolved conflicts, and (3) what conflicts cannot be handled by current tools. For this paper, we took a hybrid approach that combines automatic detection with manual inspection to reveal 204 merge conflicts and their resolutions in 15 open-source repositories. %in the version history of 15 open-source projects. Our data analysis reveals three phenomena. First, compiling and dynamic conflicts are harder to detect, although current tools mainly focus on textual conflicts. Second, in the same merging context, developers usually resolved similar textual conflicts with similar strategies. Third, developers manually fixed most of the inspected compiling and dynamic conflicts by similarly editing the merged version as what they did for one of the branches. Our research reveals the challenges and opportunities for automatic detection and resolution of merge conflicts; it also sheds light on related areas like systematic program editing and change recommendation.
翻译:开发者创建软件分支, 用于临时添加特性和纠正错误, 并定期合并分支, 以发布带有新特性或修补补补补补补补的软件。 当程序编辑不同分支的文本重叠( 文本冲突) 或这些编辑共同应用导致编译或运行错误( 汇编或动态冲突) 时, 开发者要消除合并冲突既具有挑战性和耗时性。 先前的研究检查合并冲突的流行程度, 以及冲突与代码气味或软件开发过程的关系; 建立工具以查找和解决冲突。 但是, 一些基本研究问题仍未得到全面探讨, 包括:(1) 冲突是如何引入的, (2) 开发者如何手工解决冲突, 以及 (3) 现有工具无法处理的冲突。 对于本文,我们采取了一种混合方法, 将自动检测与手动检查结合起来, 以揭示204个合并的冲突及其在15个开放源储存库中的决议。% 在15个公开源项目版本的历史中, 我们的数据分析揭示了三种现象。 首先, 汇编和动态的编辑冲突和动态冲突更难探测, 尽管当前的工具主要侧重于文字冲突。 第二, 合并背景背景, 在相同的背景中, 的合并背景下, 开发者通常以固定的校正动的校正型的校正的校程的校验程 的校验程 。