运行时,我收到以下错误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
我尝试过(使用Linux)编译VLC为Win32。
它是通过产生一个错误patch
。 如果你想打开.patch
文件,你会看到它在一堆段的组织,所谓的“帅哥”。 每个大块识别新旧版本的代码(由行号)对应的块,这些代码段之间的差异,并且将它们之间的相似性(的“上下文”)。
如果一个大块的相似性不匹配什么是在原来的文件一大块可能会失败。 当你看到这个错误,它几乎总是因为你使用了错误的版本,你打补丁的代码的补丁。 有几种方法可以解决此问题:
- 获取的更新版本
libdvdnav
已经包括补丁(最好的选择)。 - 找一个
.patch
的版本文件libdvdnav
你修补。 - 手动补丁。 对于在每个补丁大块,尝试找到相应的文件和行
libdvdnav
,并根据该补丁的说明予以纠正。 - 就拿版本
libdvdnav
这是更接近任何版本的.patch
文件的目的是为(可能是一个坏主意)。
在某些情况下,在文件版本没有什么区别 ,但只有在缩进,间距,行结束或行号。
为了修补尽管存在这些差异,有可能使用以下两个参数:
-忽略空白:它忽略空白的差异(压痕等)。
--fuzz 3:“--fuzz X”选项设置最大模糊因数到线路。 此选项仅适用于上下文和统一的比较; 它忽略了对X线,而寻找安装大块的地方。 需要注意的是较大的模糊因数提高作出错误补丁的可能性。 默认模糊因数是2; 没有点在DIFF其设置为上下文的行以上的数量,通常3。
不要忘记用户“--dry运行”:它会试着补丁不应用它。
例如:
patch --verbose --dry-run --ignore-whitespace --fuzz 3 < /path/to/patch.patch
关于Fuzz的更多信息:
https://www.gnu.org/software/diffutils/manual/html_node/Inexact.html
按照指示在这里 ,它解决了我的问题。
你必须像运行如下命令; 修补-p0 --dry运行<路径/到/你/补丁文件/ yourPatch.patch
我得到了“帅哥失败”的消息时,我并没有在相关的Git项目的顶级目录应用补丁。 我申请的补丁子目录(其中我创造了它)。
看来补丁可以从子目录Git项目内创建,但不适用。
文章来源: Hunk #1 FAILED at 1. What's that mean?