【问题标题】:Apply patchset and encounter conflicts应用补丁集并遇到冲突
【发布时间】:2021-04-17 10:08:53
【问题描述】:

我正在研究内核补丁集而不是 git 的东西。 eg:这个补丁:1

我下载了这一系列补丁,然后运行下面的命令补丁到 kernel-next。

      "patch -p1 < ../xxx.patch".

应用补丁后我得到了一些rej文件。

这是否意味着我必须愉快地挑选其他补丁,或者我必须一个一个地修复那些拒绝文件。

one of reject file look like

谢谢!!

【问题讨论】:

  • 试试git am -3,如果你的内核有.git目录。但是,是的,您必须首先跟踪和应用所有补丁依赖项,这可能是一个很大的痛苦。因此,建议您在使用 Linux 时使用 git。当您拥有.git 时,您可以开始考虑补丁,为您要应用的补丁和内核找到一个基本提交,然后查找所有依赖项(在 git 树或邮件列表等中)。无论如何,当您不知道应该在其上应用它的确切标签或 SHA 时,仅应用补丁并不容易。通常你必须先应用特性分支作为依赖。

标签: linux-kernel patch


【解决方案1】:

来自patch 手册页:

如果补丁找不到安装补丁的地方,它 将大块放到一个拒绝文件中,该文件通常是 输出文件加上一个 .rej 后缀,或者 # 如果 .rej 会生成一个文件 过长的名称(如果即使附加单个字符 # 也会使 文件名太长,然后 # 替换文件名的最后一个 字符)。

被拒绝的大块以统一或上下文差异格式出现。如果 输入是一个正常的差异,许多上下文只是空的。这 拒绝文件中大块的行号可能与 补丁文件:它们反映了补丁认为的大概位置 失败的帅哥属于新文件而不是旧文件。

所以本质上你的补丁无法干净地应用。修复 原始文件 中的 .rej 文件中显示失败的行。

echo "this is test file" > test.txt

echo "this is testy file" > testy.txt

echo "this is test  file" > test1.txt #note the extra space

diff test.txt testy.txt > diff.patch

cat diff.patch
1c1
< this is test file
---
> this is testy file

patch -p1 test1.txt diff.patch #trying to patch test1.txt with the diff
patching file test1.txt
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file test1.txt.rej

cat test1.txt.rej
***************
*** 1
- this is test file
--- 1 -----
+ this is testy file

因此,在这种(愚蠢的示例)情况下,test1.txt.rej 表示需要修复 test1.txt。您需要手动将drm_dp_helper.c.rej 文件中的更改合并到patch 程序未能将更改应用到的文件中,即drm_dp_helper.c,从补丁中的失败大块猜测本质上是删除了一堆数组等。我猜您的 drm_dp_helper.c 版本与原始补丁作者的基本文件的更改版本不同,并且可能有一些更改导致补丁应用程序失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 2010-11-27
    相关资源
    最近更新 更多