merge - 上下文感知合并?

标签 merge diff cvs semantic-analysis

是否有任何用于编程语言的差异/合并工具,都可以以语法感知的方式工作(例如XML Diff工具),而不是逐行比较(并且可以选择忽略空格)。

我对实际上遵循语言语法和分隔符的程序感兴趣,建议在不破坏语法正确性的情况下进行更改,或将语句 bundle 成多行。行为示例为:

*一旦找到引入了额外嵌套级别的if(){,它就会在下面几行自动将右括号} bundle 在一起。)

*将匹配的语法元素保持在一起,避免像删除块这样的愚蠢行为容易造成:

 int function_A()
 { 
     int ret;
     ret = something;
     ret += something_else;
      return ret;
  }

  int function_B()
  { 
     if(valid)
     {
         int ret;
         ret = something;
         ret += something_else;
          return ret;
      }
       else return -1;
  }

就个人而言,我很想找到能够处理C++语法的软件,但是了解其他语言的解决方案也会很有趣。

最佳答案

Beyond Compare完成了您的要求。它不会一次保持语法正确性,也不一次比较语言块,但是可以执行以下操作:

  • 对语言语法有一定了解,因此它可以对比较文件进行语法高亮显示,并且还可以识别并有选择地忽略不重要的差异(例如注释,包括多行注释)。
  • 支持使用外部转换程序加载和保存数据。开箱即用,它支持使用它在比较XML和HTML之前对其进行美化。您可以在比较两个C文件之前设置GNU Indent以标准化语法。
  • 可选的线粗,可让您为匹配(例如右括号)赋予更高的权重。我没有尝试过此功能。
  • 替换,忽略单个 session ,将左侧old_variable_name替换为右侧new_variable_name的每个位置。

  • 到目前为止,它是我使用过的最好的差异合并工具。它也是跨平台的,价格便宜(标准版为30美元,专业版为50美元),而且评估期非常宽裕,因此值得一试。

    关于merge - 上下文感知合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5067839/

    相关文章:

    生成代码差异的 PHP 库(github 样式)?

    java - 在比较之前可以自动格式化源代码的差异工具?

    linux - 从 eclipse 将更改提交到 cvs

    R - 按具有重复条目的变量列合并

    ruby - 试图理解 Hash#merge 与 Procs 的实现

    git - 如何查看两次提交之间没有提交的变化?

    macos - 用于 Mac OSX 的 cvs

    python - 合并几个 Python 字典

    java - 将相邻的矩形合并为一个多边形

    version-control - 列出CVS中一年内没有编辑过的所有文件