【问题标题】:Is there an intelligent 3rd merge tool that understands VB.NET是否有理解 VB.NET 的智能 3rd 合并工具
【发布时间】:2010-02-10 09:20:26
【问题描述】:

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

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

  • 了解 VB.NET 函数/方法定义的外观,并在匹配块时赋予它们高度重要性。
  • 知道 VB.NET 会随时更改字段等的大小写,因此在查找公共块时会忽略大小写差异,但仍会合并大小写差异。
  • 知道 ‘ 和 ‘// 都是 cmets 的开始,在找到公共块时会匹配它们

我还忘记了哪些其他要求?

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

【问题讨论】:

  • 你忘记了空白智能。 BC3 将理解字符串中的空格很重要,但尾随空格或制表符/空格转换不是。 (请参阅下面关于 BC3 的回答)
  • 我想你正在寻找这个plasticscm.com/sm/index.html

标签: vb.net version-control merge branch


【解决方案1】:

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

即使在 AST 中有源 cmets 的表示形式,将源代码以文本格式与将代码作为 AST(抽象语法树)的概念之间存在不匹配。

您正在寻找的是将代码存储为 XML 格式的 AST 表示形式的 IDE。然后,任何面向文本的合并工具都可以为您工作,而不仅仅是 Visual Basic 专用工具。 XML 是一种合并解释源比合并源代码更有意义的格式。

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

这就是为什么合并工具主要将每个字符更改都视为真正的更改,甚至空格也会有所不同,即使您可以选择忽略它。

【讨论】:

  • 当然,如果您的代码中有字符串文字,那么空格和大小写可能非常重要。
  • Semanticmerge 似乎已经解决了很多这样的问题,但现在已经是 6 年之后了!
【解决方案2】:

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

【讨论】:

  • 谢谢,我不想在合并的情况下,只是在代码移动时将块与 detech 匹配。
  • 谢谢,做当前硬合并的人刚刚开始使用 Araxis Merge,它是我们迄今为止尝试过的最好的工具。
  • Araxis merge 看不懂vb.net的代码,但似乎是目前最好的选择。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    我不知道它是否可以理解现场案例等等,但它很强大,所以我值得一试。

    WinMerge.

    【讨论】:

      【解决方案5】:

      合并工具理解文件和文件中的差异,它们不理解语言和它们之间的差异。

      由于大多数语言确实区分了大写和小写变量,这就是大多数合并工具的工作方式。对于 VB.NET 关键字也是如此(If, Then 可以,if, then 不行),因此即使忽略大小写也可能对您不起作用。

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

      【讨论】:

      • 但是为什么合并工具不能理解给定的语言?
      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

        我遇到这个问题已经很多年了......

        Semanticmerge已经上市,它声称

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

        我已经多年不用 VB.NET,但我希望 Semanticmerge 能够解决我的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-15
          • 1970-01-01
          • 2010-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多