有没有一种三方合并工具可以“理解”常见的重构?

5
当在一个分支上进行了简单的重构,比如“重命名字段”,将这些更改合并到其他分支中可能非常困难(提取方法更难,因为合并工具似乎无法很好地匹配未更改的块)。
现在,在我的梦想中,我正在考虑一种工具,可以记录(或计算出)在一个分支上已经完成了哪些明确定义的重构操作,然后在另一个分支上“回放”它们,而不是尝试合并重构影响的每一行代码。
也可以参见“是否有一种智能的第三方合并工具,可以理解VB.NET”来了解我的痛苦的另一半!
此外,有人尝试过像MolhadoRef关于MolhadoRef和重构感知SCM的博客文章)这样的东西吗?这是一种理论上的重构感知源代码控制。
6个回答

2
您可以使用coccinelle在不同的分支上执行相同类型的重构操作。它不会自动记录或发现正在进行的操作,您必须明确告诉它要做什么,但除此之外,它几乎可以毫不费力地在您指向的许多分支上执行相同的重构。
该工具已经被用于Linux内核的API更新等方面。
引用自其网页:
Coccinelle是一个程序匹配和转换引擎,提供了语言SmPL(语义补丁语言),用于指定C代码中所需的匹配和转换。

可惜它不适用于 C# 或 VB.NET,但至少有人已经思考过这个问题。 - Ian Ringrose

2

Darcs支持在提交中进行“标记替换”操作,该操作将一个标记的所有实例替换为另一个标记,并按照您所需的方式进行合并。


“令牌替换”存在的问题是,为了安全重命名,需要考虑范围。 - Ian Ringrose

0

Araxis Merge并不理解常见的重构,但它是我使用过的唯一一款三方合并工具。它适用于Mac和Windows,并支持自动化API,因此我想如果你有兴趣,可以通过它实现你想要的功能。值得一提的是,除了使用过他们的产品外,我与Araxis没有任何联系。


我们发现Araxis Merge是最好的传统合并工具之一。(自动化API无法帮助,因为它需要重构工具来“拥有”问题) - Ian Ringrose

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

0

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

多年来一直有很多研究,终于有一些产品面世了。


-1
在Linux中,你可以使用Meld或者在Windows中使用Winmerge
无论哪种情况,这两个工具只能“理解”文本行。重构需要一种理解代码的方式,这是超出我所知道的任何合并/比较工具的范畴。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接