当在一个分支上完成像“重命名字段”这样的简单重构时,将更改合并到其他分支中可能非常困难。 (提取方法要困难得多,因为合并工具似乎不能很好地匹配未更改的块)
现在在我的梦中,我正在考虑一种工具,可以记录(或计算出)在一个分支上完成了哪些定义良好的重构操作,然后在另一个分支上“重放”它们而不是尝试合并重构影响的每一行。
另请参阅“Is there an intelligent 3rd merge tool that understands VB.NET"我的另一半痛苦!”
也有人试过像MolhadoRef(blog article about MolhadoRef and Refactoring-aware SCM)这样的东西,理论上讲,这是一种重构意识的源代码控制。
答案 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)