Java感知合并命令

Mar*_*cus 24 java git merge

每当我在SCM中看到类似导入或方法签名更改(例如重命名变量)之类的冲突时,我想知道是否有类似于语言感知的diff/merge方法可以处理可能发生的更烦人的小变化.共享项目.在Unix环境中有什么能够更顺畅地处理冲突吗?

Joh*_*ett 5

我同意如果这样的工具存在会很棒,但我没有意识到这一点.我认为没有的原因是因为每个SCM的合并算法(无论是git,hg,bzr,svn等)都适用于最小的公分母,它只是纯文本.为了使这些SCM工具真正理解语言语法和语义,他们必须包括解析语言的能力.对于任何SCM来说,包含解析Java,C#,Python,Ruby,Groovy,C,C++等的能力似乎都是一项太大的任务,更不用说这些语言中的每一种都有不同的语法版本(例如,Java泛型在1.5之前不存在).因此,SCM必须包括检测或配置为知道源代码所用语言的语言和版本的能力.

我认为更有可能在第三方合并工具中找到任何依赖于语言的合并功能(例如.gitconfig中的merge>工具设置和.hgrc中的ui> merge设置).可以将此工具配置为知道项目中的任何.java文件都是用Java 1.6编写的,然后使用JDK中的解析功能生成AST并对更改在上下文中是否有意义执行一些"深入"分析.那种语言.