是否存在“理解”常见重构的3路合并工具?

时间:2010-02-10 09:32:39

标签: version-control refactoring merge branch

当在一个分支上完成像“重命名字段”这样的简单重构时,将更改合并到其他分支中可能非常困难。 (提取方法要困难得多,因为合并工具似乎不能很好地匹配未更改的块)

现在在我的梦中,我正在考虑一种工具,可以记录(或计算出)在一个分支上完成了哪些定义良好的重构操作,然后在另一个分支上“重放”它们而不是尝试合并重构影响的每一行。

另请参阅“Is there an intelligent 3rd merge tool that understands VB.NET"我的另一半痛苦!”


也有人试过像MolhadoRefblog article about MolhadoRef and Refactoring-aware SCM)这样的东西,理论上讲,这是一种重构意识的源代码控制。

6 个答案:

答案 0 :(得分:2)

您可以使用coccinelle在不同的分支上执行相同类型的重构操作。它不会记录或弄清楚自己要做什么,你必须明确地告诉它该做什么,但除此之外,它会或多或少地毫不费力地在你指向的许多分支上进行相同的重构。

此工具已在linux内核中用于updating API usage等。

引用其网页:

  

“Coccinelle是一个程序匹配和   提供的转换引擎   语言SmPL(Semantic Patch   语言)用于指定所需的    C 代码中的匹配和转换。“

答案 1 :(得分:2)

Darcs支持提交中的“token replace”操作,该操作将一个令牌的所有实例替换为另一个令牌,并按照您的需要进行合并。

答案 2 :(得分:0)

Araxis Merge不了解常见的重构,但它是我使用的唯一三种合并工具。它适用于Mac和Windows,并且它支持自动化API,所以如果您愿意,我可以想象您可以使用它做您想做的事情。为了记录,除了我使用他们的产品之外,我与Araxis没有关系。

答案 3 :(得分:0)

Plastic SCM(www.plasticscm.com)3向合并工具实现了Xmerge,它是唯一能够帮助您合并已移动代码的工具。

答案 4 :(得分:0)

现在有一些更好的合并工具(例如SemanticMerge)基于语言解析,旨在处理已移动和修改的代码。 JetBrains(ReShaper的创建)刚刚发布了blog

这些年来已经有很多research最后一些产品正在上市。

答案 5 :(得分:-1)

在Linux中,您可以使用Meld或Windows Winmerge

无论如何,这两种工具只能“理解”文本行。重构需要一种理解代码的方法,这超出了我所知道的任何合并/比较工具。