如何读取 .rej 文件,即

Posted

技术标签:

【中文标题】如何读取 .rej 文件,即【英文标题】:How to read .rej files, i.e 【发布时间】:2010-10-07 06:32:52 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

一个简单的例子:

$ 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片段,插入到需要打补丁的文件的合适位置,然后手工对比代码找出来, 究竟是什么行导致了冲突。

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

【讨论】:

简单明了。感谢 Bodo 的解释,我认为获取原始文件并进行 3 路合并对我来说是最快的。 我是这个网站的新手——不知道我怎么能给这个答案“积分”。一直问我一个openid【参考方案2】:

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

【讨论】:

【参考方案3】:

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

您的.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 行(第二行 @@ -4,12, +4,24 @@ 中逗号之前的部分),并从新版本文件的第 4 行开始持续 24 行(@@ -4,12, +4,24 @@ 中逗号之后的部分.

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

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

【讨论】:

以上是关于如何读取 .rej 文件,即的主要内容,如果未能解决你的问题,请参考以下文章

RF中如何读取EXCEL文件

如何在 Android Q 及以上版本中保存/读取文件(即 txt、mht、pdf 等),因为 getExternalStoragePublicDirectory() 已弃用 [重复]

C语言如何读取文件?

MFC中,如何将CBitmap中的图片复制到另一CBitmap的一块区域中,即如何读取一个CBit

如何优化打开和读取多次相同文件的python脚本?

如何提高java读取大文本文件的效率