如何阅读.rej文件,即

时间:2009-02-12 19:38:52

标签: diff patch

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

具体来说,我的问题是如何阅读/解释.rej个文件patch在几个问题上失败时创建的文件。我见过的patch / diff的大多数讨论都没有包含此内容。

3 个答案:

答案 0 :(得分: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片段,将其插入要修补的文件中的适当位置,然后手动比较代码来弄清楚什么线条实际上导致了冲突。

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

答案 1 :(得分:10)

当补丁不成功时,

Wiggle是应用.rej文件的绝佳工具。

答案 2 :(得分:4)

我不是处理补丁文件的专家,但我想根据我对其中包含的信息的理解,添加一些关于如何阅读它们的清晰度。

您的.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)与.rej文件(标注为b/www/js/)之间的差异从原版的第4行开始,然后继续12行(第2行的@@ -4,12, +4,24 @@中逗号之前的部分),并从文件的新版本的第4行开始,继续进行24行(在@@ -4,12, +4,24 @@中的逗号之后的部分。

有关详细信息,请参阅http://blog.humphd.org/vocamus-906/的补丁文件(包含我上面提到的信息,以及有关添加的行和/或文件版本之间的详细信息)的精彩概述。

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