【问题标题】:diff'ing diffs with diff?差异差异与差异?
【发布时间】:2011-01-05 08:46:51
【问题描述】:

我需要知道这两个补丁是否实际上相同。

我有一个旧补丁文件和一个用 unix diff 命令创建的新补丁文件。仅区分补丁会报告由于创建补丁时的时间戳而产生的差异。

有没有办法(有差异?)可以可靠地告诉我这两个补丁是否实际上相同?

【问题讨论】:

  • 我们在您的 diff 中放置了一个 diff,这样您就可以在 diff 的同时进行 diff
  • 哟,我让你 diff,但 beyonce 拥有有史以来最好的 diff。一直都在!
  • 是否有递归问题的徽章?应该有。
  • @OP 你能显示失败的输出吗,一个简单的方法是过滤掉那部分

标签: unix shell diff patch


【解决方案1】:

使用来自patchutilsinterdiff

【讨论】:

  • 感谢 ehemient。这只是门票。
  • 不幸的是,在进入 interdiff 之后我失败了。首先没有像 diff 这样的返回码,其次它在两个大但相同的补丁之间不正确地产生了大量差异。
  • 嗯。无论哪种方式,返回码都为零,但如果两个差异相同,则根本不应该有输出。两个差异之间是否有任何文件名更改?我刚刚在几个 80kB 的文本文件上测试了 interdiff,其中大约有 20kB 的更改,它在识别不同的差异方面工作得很好。
  • 啊,你是对的。我用 vimdiff 目视检查了补丁,顶部目录名称有一个小的变化。毕竟,Interdiff 是诚实的。谢谢!!
  • 您可能会发现 filterdiff --strip=[n] 对于从补丁程序的路径中删除前导组件很有用。
【解决方案2】:

您可以将两个补丁应用到同一个源文件的副本,然后正常使用 diff 检查结果的差异。

补丁代表对输入文件的更改,因此如果两个补丁对输入文件具有相同的效果,则它们是相同的。补丁的差异直接反映在这些补丁的结果差异上。

两个补丁之间不会导致这些补丁结果不同的任何差异都是无关紧要的。

【讨论】:

  • 但是您如何“检查结果中的差异”?如果我有两个相同源代码的副本(比如在两台不同的机器上使用相同的 SVN 签出)并且我在一台机器上应用一个补丁,在另一台机器上应用另一个补丁,我运行 svn diff 并且我再次离开,有两个差异要检查。您关于“如果两个补丁对输入文件具有相同的影响,则它们是相同的”的观点很好,但问题是我们如何确定这一点?
【解决方案3】:

你可以试试Beyond Compare

它可以被配置为用其他东西替换一个或两个文件中的字符串,然后它会在幕后进行。屏幕上的文件看起来仍然存在于磁盘上,但根据处理后的文件有所不同。

您可以将其配置为将格式为时间戳的所有文本更改为两个文件中通用的内容,然后您只需比较其他所有内容。

在 Windows 客户端中,要更改这些设置,工具栏中有一个带有小符号的按钮,看起来像人、躯干和头部,在打开的对话框中,有一个替换选项卡。

【讨论】:

  • 谢谢,但我需要一个开源工具,因为未知数量的用户将执行补丁比较。
  • 好的,但是如果你只需要知道它们是否相同,除了时间戳,也许你应该对文件执行 AWK 或 SED 或类似的操作来转换它,这样时间戳相等,然后您可以在文件上运行任何类型的差异。
  • 或者是补丁过程更像是“给定原始文件,用其中一个文件对其进行补丁,然后用另一个文件对相同的原始文件进行补丁,然后比较两次补丁操作的结果” ,这样实际的补丁可能包含不同的数据,但它们最终得到相同的结果?
猜你喜欢
  • 2016-09-08
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多