29

我无法将补丁应用到我的源代码树,这不是常见的-p剥离问题。patch能够找到要修补的文件。

具体来说,我的问题是如何读取/解释在几个大块上失败时创建的.rej文件。patch我见过的大多数关于patch/的讨论diff都不包括这个。

4

3 回答 3

19

一个简单的例子:

$ 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片段,插入到需要打补丁的文件的合适位置,然后手动对比代码,看看是哪几行实际造成冲突。

或者 - 或者:获取原始文件(未修改),对其进行修补并在文件上运行三路合并。

于 2009-02-12T20:16:50.427 回答
11

Wiggle是在补丁不成功时应用 .rej 文件的绝佳工具。

于 2012-02-19T16:41:36.477 回答
7

我不是处理补丁文件的专家,但我想根据我对它们包含的信息的理解,对如何阅读它们进行一些澄清。

你的.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/上的补丁文件的出色概述(包含我上面提到的信息,以及添加的行和/或文件版本之间的详细信息)。

当然欢迎任何更正或澄清。

于 2015-12-16T07:45:22.373 回答