【问题标题】:How to handle this patch issue如何处理此补丁问题
【发布时间】:2013-10-17 14:28:22
【问题描述】:

我正在尝试使用差异工具创建补丁文件。但遇到了问题。 我创建了一个名为 a 的目录并将原始文件放入其中:

  • a/original_file.c

我创建了另一个名为 b 的目录,并将修改过内容的相同文件放入其中。

  • b/original_file.c

我从网上复制了 b/original_file.c 文件的内容,并将其放入一些文本编辑器中。

发出命令diff -Naur a b > patch_file.patch 后,我可以看到patch_file.patch 已生成并且它有一些不需要的更改(它与缩进有关)。

例如:

 return msg (MSG_NOTIFY, &msg, senr,
-                 sizeof (struct msgotify));
+                  sizeof (struct msgotify)); 

您可以看到与缩进相关的更改,其中sizeof (struct msgotify)) 被相同的sizeof (struct msgotify)) 替换,但缩进的一个基础是我们不想要的。

谁能告诉我如何解决这个问题?

【问题讨论】:

    标签: linux git diff patch


    【解决方案1】:

    如果您不关心间距的变化,请将-b 添加到生成补丁的diff 命令中。

    【讨论】:

    • 谢谢@Jonathan,所以我的命令是 diff -Naur -b a b?我的新补丁文件将根据 b/original_file.c 缩进 ??
    • 是的,您可以使用 diff -Naur -b 或将其与其他标志 diff -Naurb 结合使用。由于补丁文件不会包含任何只有间距不同的行,所以会发生什么取决于您如何应用补丁。由于补丁将a 转换为b,如果您将补丁应用到a 中的文件,您将获得与a 中包含相同间距的行的结果,因为您没有付费注意间距的差异。如果您将补丁反向应用到b 中的文件,您将访问a 中的文件,但对于那些未明确更改的行,其间距与文件b 相同。
    • 您建议的选项对我来说效果很好,我只能在补丁文件中看到所需的更改,但是当应用此补丁文件时,我收到错误,之前不存在。
    • 很抱歉听到这个消息。问题可能在于实际变化周围的上下文行中存在间距变化;这可能会扰乱匹配算法。我没有看到patch 的选项说“使用-b 选项创建的差异”。为什么你认为间距如此重要?进行额外的更改可能会更简单。我不知道该建议什么;修补程序文件上的手动手术可能会起作用,但是您不妨首先手动应用修补程序 - 可能。
    • 为什么你认为间距如此重要?好吧,如果有人查看此补丁文件,他/她将很难看到文件中的实际(期望)更改,因为它是一个大文件,所以在大多数情况下,他/她只会看到与空格相关的更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多