MergeResolver — Automatic Merge Conflict Resolution

栏目: IT技术 · 发布时间: 5年前

Large projects get a lot of pull requests. On busy projects, these pull requests can fall behind. The farther they fall behind, the less likely they become to ever get merged.

You've seen this for yourself. Pull request #6 on a project working on pull request #600, still open because it's a good idea – just not quite good enough for anyone to do the tedious manual work of reconciling it with the master branch. Other common failure modes include delaying responding to merges with conflicts, or installing tools like "pager duty" to ensure rapid manual response to conflicts (see more in The life-cycle of merge conflicts ).

"Tedious manual work"? A phrase to make any programmer's ears prick up. There should be some way to automate that.

MergeResolver is an experimental GitHub application for JavaScript projects. When you install MergeResolver on a repository, it waits for a conflict to happen. Conflicts can happen with new pull requests, or when a new commit to master conflicts with one or more open pull requests.

If a conflict happens, MergeResolver clones your repository and sets to work. First, it tries to avoid the conflict by retrying the merge, but on the Abstract Syntax Tree (AST) level.

MergeResolver — Automatic Merge Conflict Resolution

By treating code as ASTs rather than simply a string of characters, MergeResolver recognizes code's structure and semantics. This ensures all potential conflict resolutions will parse as valid code, and in some cases cleanly reconciles changes that would conflict under Git's built-in, line-oriented merge algorithms (as in the above example).

MergeResolver — Automatic Merge Conflict Resolution

If AST merging fails, things get more interesting. MergeResolver understands different strategies for reconciling merge conflicts – strategies mined from large datasets of real-world merge conflict resolutions (see On the nature of merge conflicts ). With this knowledge it can generate possible conflict resolutions.

But how does it know which generated conflict resolutions are viable? MergeResolver relies on the only source of truth about a program's requirements: its test suite. MergeResolver finds a viable resolution by looking for a resolution that passes your program's test suite.

Once MergeResolver finds a resolution that passes your test suite, it uses GitHub's Checks API to provide a button (under the Checks tab on the pull request) that can be used to accept the resolution.

MergeResolver — Automatic Merge Conflict Resolution

If you want to inspect the conflict resolution before accepting it, a link is provided to a diff of the merge resolution commit.

MergeResolver is currently available for direct installation . It is free for open-source projects to try. You can add MergeResolver to your Node-based JavaScript repository here .

Please let us know what works well or not for you, and we'll strive to make it useful enough that it becomes a staple of your team's development workflow.

This material is based upon work supported by the Defense Advanced Research Projects Agency (DARPA) under Contract No. D17PC00096. Any opinions, findings and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the Defense Advanced Research Projects Agency (DARPA); or its Contracting Agent, the U.S. Department of the Interior, Interior Business Center, Acquisition Services Directorate, Division III.


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++程序设计原理与实践

C++程序设计原理与实践

(美)Bjarne Stroustrup / 王刚 等 / 机械工业出版社 / 2010.7 / 108.00元

本书是经典程序设计思想与C++开发实践的完美结合,是C++之父回归校园后对C++编程原理和技巧的全新阐述。书中全面地介绍了程序设计基本原理,包括基本概念、设计和编程技术、语言特性以及标准库等,教你学会如何编写具有输入、输出、计算以及简单图形显示等功能的程序。此外,本书通过对C++思想和历史的讨论、对经典实例(如矩阵运算、文本处理、测试以及嵌入式系统程序设计)的展示,以及对C语言的简单描述,为你呈现......一起来看看 《C++程序设计原理与实践》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具