补丁对diff文件过于严格

时间:2012-05-18 17:25:39

标签: linux ubuntu diff gnu patch

我需要一种自动方式来为配置文件添加一行。我使用diff创建了一个我想用patch应用的.diff文件。但是,我需要修补的文件在其他地方稍作修改。例如。在配置文件的其他地方添加了一些其他行。

我认为patch实际上对此很聪明并且弄清楚补丁是否仍然可以在没有冲突的情况下应用,但每当我尝试将补丁应用于稍微的配置文件时我都会收到错误与原始文件不同。

我是否需要传递给patchdiff以使其不那么严格?我正在使用

生成.diff文件
diff -ruN oldfile.conf newfile.conf > mypatch.diff

然后使用

应用补丁
patch myconfig.conf mypatch.diff

我想要的是补丁将尝试相当自由地应用补丁,如果它不知道如何,只需返回警告,但不是错误。目前我看到了这些错误:

jeroen@jeroen-ubuntu:~/Desktop$ diff -ruN default.conf default_new.conf > mypatch.diff
jeroen@jeroen-ubuntu:~/Desktop$ patch default2.conf mypatch.diff 
patching file default2.conf
Hunk #1 FAILED at 28.
1 out of 1 hunk FAILED -- saving rejects to file default2.conf.rej
jeroen@jeroen-ubuntu:~/Desktop$

1 个答案:

答案 0 :(得分:2)

  

我认为补丁实际上对此很聪明并且弄清楚补丁是否仍然可以在没有冲突的情况下应用,但每当我尝试将补丁应用于与原始配置略有不同的配置文件时我都会收到错误文件。

实际上,这是成立的。但是,它在很大程度上取决于您的定义“略有不同”。基本上,更改需要远离修补程序修改的位置。

您可以尝试使用-F参数调用补丁

  

-F num或--fuzz = num

     

设置最大模糊因子。此选项仅适用于具有上下文的差异,并导致补丁忽略多行内容             寻找安装大块头的地方的文字。请注意,较大的模糊因子会增加错误补丁的几率。默认的模糊面             tor是2.模糊因子大于或等于上下文差异中的上下文行数,通常为3,忽略所有上下文。

但我不建议。

如果你只是想要

  

将一行添加到配置文件的自动方式

您考虑过使用perlawked来完成这项工作吗?我不认为patch是适合它的工具。