是否有一个了解VB.NET的智能第三合并工具

时间:2010-02-10 09:20:26

标签: vb.net version-control merge branch

我的合并工具有问题,因为有时它无法正确匹配两个分支中未更改的块。发生这种情况时,合并工具变得无用,合并必须手工完成。

因此我正在寻找一种工具:

  • 了解VB.NET函数/方法定义的含义,并在匹配块时赋予它们高度重要性。
  • 知道VB.NET会改变字段等的情况,无论何时感觉如此,因此在查找公共块时忽略了差异,但仍然会合并差异。
  • 知道'和'//都是评论的开头,并且在找到公共区块时会匹配它们

我忘记了其他要求吗?

(我们遇到的问题是我们的合并工具(SCM源代码控制系统的Guiffy部分)是用Java编写的,因此已经用Java进行了很好的测试,并且似乎在我的C#代码的“现实生活”中运行良好,但是我们的VB.NET代码并不能很好地解决这个问题。)

7 个答案:

答案 0 :(得分:2)

回答Ian Ringrose的评论 “但为什么合并工具不能理解给定的语言?”

使用文本格式的源代码和将代码作为AST(抽象语法树)的概念之间存在不匹配,即使AST中存在源注释的表示。

您正在寻找的是一个IDE,它将代码存储为XML格式的AST表示。然后,任何面向文本的合并工具都适合您,而不仅仅是Visual Basic专用工具。 XML是一种格式,在这种格式中,合并解释的源会使得源代码更合并。

对于区分大小写的语言的一般做法,格式化在代码审查方面有所作为,重新格式化代码被归类为重构,并且通常必须在版本控制过程中加以考虑。 其中一个原因是代码格式化甚至源文件的编码和回车设置实际上影响了项目,而不仅仅是代码生成的AST。代码可以包含注释中的元数据,可以由运行时过程处理,这甚至可能取决于编码和行结束设置。 例如,ASPNET网站的html输出取决于字符编码,如果你滥用它,你输出可能会出现乱码。处理代码的第三方工具可能会失败,如果它的解析器无法处理被认为适合Microsoft编译器的回车。

这就是为什么合并工具主要将每个字符变化视为真正的变化,即使你有一个忽略它的选项,即使是空白也会产生差异。

答案 1 :(得分:1)

我正在评估的Araxis Merge支持忽略大小写选项。

答案 2 :(得分:1)

Beyond Compare也许可以做你想做的事。它具有适用于所有主要语言的语法文件,尽管它与大多数其他语言一样是基于行的工具。它在我主要使用的Java源代码上完美运行,但您可以为特殊文件类型定义自己的语法文件。您可以添加规则来执行要进行的特定于应用程序的特定更改。它与SVN的集成是一个完美的互动工具。

我唯一的抱怨是他们不支持64位Linux或无头CLI操作。我很乐意在没有GUI的构建服务器上使用它,但由于这两个问题,它是不可能的。如果有人知道一个支持语法定义的纯粹基于CLI的合并工具,我很乐意听到它。

答案 3 :(得分:0)

我现在几乎完全使用WinMerge,我发现它比Tortoise SVN中的Merge更好,显然它支持VB.Net。

我不知道它是否可以理解字段案例等等,但它非常强大,所以我可能值得一试。

WinMerge

答案 4 :(得分:0)

合并工具了解文件中的文件和差异,他们不了解语言及其之间的差异。

由于大多数语言都区分大写和小写变量,这就是大多数合并工具的工作方式。对于VB.NET关键词也是如此(If, Then没关系,if, then不是),所以即使忽略大小写,它也可能不适合你。

就个人而言,我使用perforce合并工具(p4merge)。

答案 5 :(得分:0)

p4merge非常棒,可以在perforce.com免费获得。

我不知道它是否理解VB.net,但它是一个很棒的工具。

答案 6 :(得分:0)

多年来,我遇到了这个问题....

Semanticmerge已经上市,它宣称

  

源代码diff和merge基于语言解析(C#,VB.NET,Java),旨在处理   使用已移动和修改的代码。

我多年没有使用VB.NET了,但我希望Semanticmerge可以解决我的问题。