linux补丁忽略行号

时间:2014-04-03 17:56:23

标签: linux patch

我有一个产品(比如版本1),并且有一些自定义更改(比如版本1.x)。我在这些版本上运行差异并创建补丁文件。

现在有一个更高版本的产品(比如版本2)。我希望将从版本1和版本1.x创建的补丁应用到版本2。 这里的困难是线号不会保持不变。 我知道可能会有一些失败的帅哥,但至少如果我可以在版本2上应用补丁(通过忽略行号但通过引用下面和上面的行),它将节省我很多手动工作。

最好的方法是什么?有什么建议? 还有什么有用的工具可以帮助吗?

谢谢! 拉夫

2 个答案:

答案 0 :(得分:3)

补丁通常会这样做。你会看到它说像

Hunk #1 succeeded at 6 (offset 5 lines).

当它应用与原始版本不同的行号时的补丁。

如果某些相邻行已更改,但仍有足够的上下文来确定应用修补程序的位置,则会显示with fuzz N,其中N是不匹配的上下文行数。

答案 1 :(得分:1)

我在使用统一差异时遇到了同样的问题。如下所示,它使用了context差异:

创建补丁:

diff -c original.file modified.file > my.patch

应用补丁:

patch -p0 --fuzz 500 --ignore-whitespace < my.patch

此后,我们需要检查不匹配:

  1. 在原始文件和修改后的文件之间的目标文件夹上生成差异

    diff -c destination.file.orig destination.file > second.patch
    
  2. 将源文件夹中的补丁与目标文件夹中的补丁进行比较。通常,我在Linux + Mac上使用midnight commander的compare files命令,在Windows上使用WinMerge。