【问题标题】:Free diff tool that is configurable? [closed]可配置的免费差异工具? [关闭]
【发布时间】:2010-12-29 05:20:44
【问题描述】:

是否有 diff 工具可以让我编写正则表达式以从差异中删除一行?

喜欢,看这两行:

this.Visible = true;
Visible = true;

我是否可以编写一个表达式,如果行差正好是this,则忽略差异。

我具体该怎么做?

我再举一个例子。就像System.ExceptionException 对我来说都是一样的,我不想在差异中展示它们。

【问题讨论】:

  • 与其强迫 diff 工具做与它应该做的完全相反的事情(告诉你有什么不同),并依赖这样一个工具的可用性,为什么不使用像 sed 这样的简单工具还是 m4 先修补文件?
  • 修补文件会改变内容,你将如何部分修补文件,而不是全部或系统被删除。我只想忽略那些导致任何差异的因素。
  • 我会考虑的另一件事是,这只是一种不好的做法。 this.xxx 与 xxx 的含义不同。第一个获取当前对象的 xxx 属性,第二个获取最近范围内的 xxx。由于忽略差异,您可能会错过一个错误。这似乎是一个坏习惯。无论如何,祝您找到解决方案好运。
  • 我想这取决于你为什么首先做差异。大概,这是您的源代码管理签入过程的一部分?如果是这样,那么只需借此机会解决两个文件之间的差异(无论您的组织编码标准是什么)并将文件签入 - 问题应该不再是问题。如果我的假设不正确,我深表歉意
  • @belugabob:好的,让我解释一下,首先我不在乎我是否删除了正确的“this”。与否,我有很多这样的差异,我想只关注重要的一个,“这个”。对我来说并不重要,因为大部分重构都是由我仅使用 CodeRush 完成的,所以我知道它们是正确的,但在检查之前我需要仔细检查我正在检查的内容。为什么这个功能很重要可能是 @987654321 @video 会解释更多,但这对我很重要。 “解决两个文件之间的差异”我不明白差异如何

标签: diff winmerge


【解决方案1】:

您可以使用KDiff3 执行此操作。请参阅Preprocessor Commands 上的文档部分。

更新:我看到您有一个似乎需要语义差异程序的进一步请求。请参阅Semantic Diff Utilities 获取一些建议。

【讨论】:

  • 你能解释更多吗,因为我猜预处理器匹配整行,当差异是这样时你不能指定忽略。
  • 对,你不能直接说“忽略这种差异”。但是,您可以对输入进行标准化,以便不再出现差异。例如,要忽略输入中字母的大小写,您可以使用“行匹配预处理器命令”将所有大写字符转换为小写。对于您的示例,您可以使用相同的过滤器从输入行中删除 this. 的所有实例。
  • 那会给出完全错误的结果,这不是我的问题。我猜 WinMerge 也有行过滤。我对 Diff 过滤感兴趣。
  • 听起来您对语义差异而不是文本差异更感兴趣。我已通过指向更多信息的链接更新了我的答案。
  • 已接受答案为 Eclipse,这对 C# 人没有用。此外,我仍在寻找可配置的东西而不是语义差异,虽然我只做语义差异,但只隐藏我感兴趣的差异。
【解决方案2】:

SourceGear 的DiffMerge 支持这一点。您需要创建一个与您正在合并的文件匹配的规则集或编辑默认规则集。在规则集中将模式添加到 Lines to Omit 属性。有关详细信息,请参阅在线帮助中的 Ommitted Lines 属性。

【讨论】:

  • 错误答案 (-1),选项在哪里。请详细说明如何忽略特定差异。
  • 已经试过了,还是不行。添加了模式 this[.] 和 ^(\s)*this[.](.)*$ 但没有任何效果。
【解决方案3】:

我用过的最好的源比较软件是Beyond Compare。有了它,您可以完全按照您的要求进行操作:输入regular expression,告诉软件忽略某些差异。但是,它不是免费的。

如果你真的需要一个免费的应用程序,你可以试试WinMerge。不过我不是很喜欢这个界面。

【讨论】:

  • 以及如何在BeyondCompare中做到这一点,我找不到那个选项,界面很乱。
  • 在版本 2 中,在“文件比较”中,转到“工具”->“选择规则”->“新规则”。然后转到重要性选项卡,在不重要的文本上单击“新建”,选择“正则表达式”,然后ta-da!
  • 如果您使用的是版本3,请告诉我,我会寻找配置。
  • 感谢我的支持,看起来它可以正常工作。它在规则替换选项卡中。版本 3 中没有不重要的文本。我猜他们已经修改了它。
  • this\.(.*) $1 在文本比较的会话菜单 -> 会话设置,替换选项卡下可用
【解决方案4】:

Notepad++ 有一个可配置的比较插件。

【讨论】:

  • 你能告诉我如何在记事本++中做到这一点
  • 安装notepad++后,进入“插件”->“比较”,你会看到一堆选项供你配置,或者你可以选择第一个选项“比较”(奖励: Alt+D) 执行差异。
  • 我不认为你明白这个问题。没有这样的选项可以设置正则表达式。
  • 搜索和替换对话框已经允许您执行正则表达式。
  • 我知道如何在 notepad++ 中搜索和替换,我已经使用它多年了,问题是关于忽略差异工具的差异。
【解决方案5】:

如果您找不到可以满足您需求的现有差异工具,您可以编写自己的。

Python 有一个diff module 用于编写类似 diff 的工具,它将为您处理所有复杂的 diffing 算法。他们有一个示例脚本,可以在 60 行代码中以标准 Unix diff/patch 格式或并行 HTML 进行文件差异。

模块中的差异允许您定义“垃圾”过滤器以预处理行以删除您不希望包含在差异中的部分。这些是 Python 函数,因此您不仅限于正则表达式匹配。

我快速重新阅读了文档,过滤器仅适用于忽略整行或单个字符,这不是您想要的。但是,您可以轻松地预处理您输入到差异中的数据以删除您想要忽略的文本。

【讨论】:

    【解决方案6】:

    我无法在任何软件中找到该功能,但 Beyond Compare 和 Araxis 有此功能。

    从 WinMerge wiki 看来,它们在新的未来将不支持插件或任何此类功能。太糟糕了。

    【讨论】:

      【解决方案7】:

      如果您知道如何编写 JavaScript,您可以将相关的正则表达式插入到 Pretty Diff 工具的缩小部分。该工具完全免费,代码完全开放,带有内联文档。

      如果您想在工具中添加特定功能,除了个人定制之外,请告诉我,我会添加。

      【讨论】:

      • 老实说,在任何意义上,它看起来都不像一个差异工具。一个好的工具是不需要任何时间来学习的,一个好的用户界面是:不要让我思考。
      • 一分钱一分货。一个好的工具是带有编写良好的文档的工具。
      【解决方案8】:

      试试GNU diffutils。如果您在 Windows 上,您可以使用来自 www.cygwin.com 的Cygwin 分发 GNU diff。

      【讨论】:

      • 不要认为它有什么不同,它会像其他人一样压制整条线,而不仅仅是差异。请纠正我,如果我错了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 2010-10-05
      • 2011-02-26
      • 2010-12-12
      • 1970-01-01
      相关资源
      最近更新 更多