我无法将补丁应用到我的源代码树,这不是常见的-p
剥离问题。patch
能够找到要修补的文件。
具体来说,我的问题是如何读取/解释在几个大块上失败时创建的.rej
文件。patch
我见过的大多数关于patch
/的讨论diff
都不包括这个。
一个简单的例子:
$ echo -e "line 1\nline 2\nline 3" > a
$ sed -e 's/2/b/' <a >b
$ sed -e 's/2/c/' <a >c
$ diff a b > ab.diff
$ patch c < ab.diff
$ cat c.rej
***************
*** 2
- line 2
--- 2 -----
+ line b
如您所见:旧文件包含第 2 行,新文件应包含第 b 行。但是,它实际上包含行 c(在拒绝文件中不可见)。
其实解决此类问题最简单的方法就是从.diff/.patch文件中取出diff片段,插入到需要打补丁的文件的合适位置,然后手动对比代码,看看是哪几行实际造成冲突。
或者 - 或者:获取原始文件(未修改),对其进行修补并在文件上运行三路合并。
Wiggle是在补丁不成功时应用 .rej 文件的绝佳工具。
我不是处理补丁文件的专家,但我想根据我对它们包含的信息的理解,对如何阅读它们进行一些澄清。
你的.rej
文件会告诉你:
因此,鉴于此消息,在我的 .rej 文件的开头注明:
diff a/www/js/app.js b/www/js/app.js (rejected hunks)
@@ -4,12 +4,24 @@
我看到对于我的问题www/js/app
文件a/www/js/app.js
(第二行b/www/js/
的逗号@@ -4,12, +4,24 @@
),并从新版本文件的第 4 行开始,持续 24 行(@@ -4,12, +4,24 @@
.
有关更多信息,请参阅http://blog.humphd.org/vocamus-906/上的补丁文件的出色概述(包含我上面提到的信息,以及添加的行和/或文件版本之间的详细信息)。
当然欢迎任何更正或澄清。