1号帅哥失败了,那是什么意思?

在运行 make时,我得到以下错误,我不知道这意味着什么,也不知道如何处理它。有人能给我指点迷津吗?

(cd libdvdnav-git && patch -p1) < ../../contrib/src/dvdnav/dvdnav.patch
patching file Makefile.am
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file Makefile.am.rej
make: *** [dvdnav] Error 1

我正在尝试为 win32交叉编译 VLC (使用 linux)。

138668 次浏览

这是由 patch生成的错误。如果您打开 .patch文件,您将看到它被组织成一系列的段,即所谓的“ hunks”。每个大块都标识出旧版本和新版本中相应的代码片段(通过行号)、这些代码片段之间的差异以及它们之间的相似之处(“上下文”)。

如果主体的相似性与原始文件中的不匹配,主体可能会失败。当您看到这个错误时,几乎总是因为您使用补丁来修补您正在修补的代码的错误版本。有几种方法可以解决这个问题:

  • 获取已经包含补丁的 libdvdnav更新版本(最佳选择)。
  • 获取正在修补的 libdvdnav版本的 .patch文件。
  • 手动补丁。对于补丁中的每个块,尝试在 libdvdnav中找到相应的文件和行,并根据补丁中的指令更正它们。
  • libdvdnav的版本为例,它更接近于 .patch文件的目的版本(这可能是个坏主意)。

当我没有在相关 git 项目的顶部目录中应用补丁时,我收到了“ hunks 挂掉了”的消息。我在一个子目录中应用了这个补丁(在我创建它的地方)。

似乎补丁可以从 git 项目中的子目录创建,但不能应用。

调试技巧

  1. 将 crlf 添加到补丁文件的末尾,并测试它是否有效
  2. 尝试使用——邻接-空格命令,如 in: markus@ubuntu:~$ patch -Np1 --ignore-whitespace -d software-1.0 < fix-bug.patch 参见: http://www.markusbe.com/2009/11/how-to-application-a-patch-and-Solution-hunk-fault-can-find-file-to-patch-and-others/# hunk-failder”rel = “ noReferrer”>

在某些情况下,有 没什么区别的文件版本,但只有在缩进,间距,行结束或行号。

要修补这些差异,可以使用以下 两个理由:

忽略空格: 它忽略空格差异(缩进等)。

—— fuzz 3: “—— fuzz X”选项将最大模糊因子设置为行。这个选项只适用于上下文和统一差异; 它在寻找安装大块的位置时忽略到 X行。请注意,较大的模糊因子增加了错误补丁的几率。默认的模糊因子为2; 将其设置为多于 diff 中的上下文行数(通常为3)是没有意义的。

不要忘记用户“——模拟运行”: 它将尝试不应用它的补丁。

例如:

patch --verbose --dry-run --ignore-whitespace --fuzz 3 < /path/to/patch.patch

关于 Fuzz 的更多信息:

Https://www.gnu.org/software/diffutils/manual/html_node/inexact.html

按照说明 给你,它解决了我的问题。

你必须像下面这样运行命令; Patch-p0——干运行 < path/to/your/patchFile/yourPatch.patch

在我的情况下,补丁是完全由 IDEA 生成罚款,但是,我编辑的补丁,并保存它改变 CRLF 到 LF,然后补丁停止工作。奇怪的是,转换回 CRLF 没有工作。我注意到在 VI 编辑器中,即使在设置为 DOS 格式之后,’^ M’也没有添加到行尾。这迫使我只能对 VI 进行修改,以保留 EOL。

这可能适用于您,如果您在非 Windows 环境中对一个修补程序进行更改,该修补程序涵盖来自 Windows 环境的两个版本之间的更改。您需要注意如何编辑这些文件。

顺便说一句,ignore-whitespace没有帮助。

第一帅哥在第一场失败了。 1/1hunk FAILED ——保存拒绝文件到 Makefile.am.rej

同样的错误,我发现当我应用修改通过补丁,然后在堆栈溢出完全搜索,但我没有得到答案。

然后我搜索了一些小地方 像原因背后的补丁错误,然后我发现

Hunk # n 在 nnn. n 失败,n 个 Hunk 中的 n 个失败——将拒绝保存到 file.rej 文件

这意味着不能在文件中引入一个或多个名为 hunks 的更改。有时这可能是因为补丁通过电子邮件发送或复制到文件中,并且添加或删除了空格。尝试在命令行中添加——邻接-空格来解决这个问题。

第二步

然后我搜索了不同的文件结束,我发现有两种格式系统 LF,CF

然后我检查我的文件我什么格式使用

现在,如果这个文件是在 * NIX 系统中创建的,它将显示

$cat-A file 你好

你好 但是如果这个文件是在 Windows 中制作的,它就会显示

$cat-A file 你好 ^ M $

你好 ^ M

表示 CR,$表示 LF。注意,Windows 没有使用 CRLF 保存最后一行

这是我在 Stackoverflow 找到的

然后我检查我的原始文件格式和. patch/diff 我得到的补丁文件都有 LF 和 Cf

然后,我转换这些文件之前应用补丁窗口或 Unix 格式使用

扩展名或 unix2dos 文件名

这个转换文件

然后应用补丁得到结果

命令提示命令

创建文件 触摸 filename.txt

用于创建补丁/diff 文件

Diff-u Origalfile.txt ededfile.txt > Origalfile.diff 或者 Diff-u Origalfile.txt ededfile.txt > Origalfile.patch

在应用更改检查文件格式之前

Cat-原始文件
Cat-原始文件 diff

现在转换 doc2unix 或 unix2dos Unix2dos Origalfile.txt Unix2dos 原始文件 diff

申请变更 Txt < Origalfile.diff

搞定!

我希望这能帮到你!

这发生在我用 git diff生成补丁文件并粘贴输出时:

git diff branch-1 branch-2 # and then copy the output

这将插入或更改空白的性质。

我将输出定向到一个文件:

git diff branch-1 branch-2 > my-patch.patch

这就解决了问题。

请确认(在制作 diff 文件之前)将被差分的2个文件 文件末尾没有额外的新行

光标在文件中最后一次输入单词后停止。