“补丁意外中止”是什么意思?


14

这是我的patch命令的输出:

Hunk #11 merged at 4184,4190.
Hunk #12 merged at 4444.
Hunk #13 merged at 4944.
Hunk #14 NOT MERGED at 5106-5116.
Hunk #15 merged at 5290.
Hunk #16 merged at 5448.
patch unexpectedly ends in middle of line
Hunk #17 merged at 5608,5611.

命令是

patch -d ~/SOME_DIR -p1 --merge --verbose -u

该补丁使用git生成:

git --git-dir ~/SOME_DIR/.git diff -U8 bb1ee538982957b421a4c0e78f30428e73c9a072 HEAD -- malloc.c

是什么patch unexpectedly ends in middle of line意思,这是一个问题吗?是指大块16还是17?我可以在补丁文件中查找什么,以找出造成此问题的原因?

Answers:


11

该消息指向Hunk 16。

这个GitHub讨论可能与您的问题有关。

关于git生成的diff与patch一起使用时,由于CRLF(回车,换行)问题,补丁在行消息中间意外结束

引用结论:

[..] git可能对行尾非常挑剔。您是否在Windows上?无论如何,您可能应该在git config中设置autocrlf。如果您使用的是Windows,则要使用“ true”;如果您使用的是Mac或Linux,则应使用“输入” [..]

GitHub 在处理行尾的文章中详细介绍了上述声明。


1
应当指出,发问者问这是不好的-在行中间结束不是问题-只是警告。
罗斯

3

如果您没有使用git(@maxslepzig的注释是关于在上下文中使用patch的git,请尝试在文件末尾添加回车符。我做到了,并patch接受了我的补丁。


2

要添加到这个非常古老的讨论中:

导致OP出现警告的问题通常是由行尾问题引起的。

patch 希望以确定文件的末尾尾随换行(LF)(和统一差异可能已经意外地截断的警告)

  1. 您可以执行简单的操作:

    echo -e "\n" >> YOURPATCHFILE

    这会将换行符附加到文件的末尾,而不进行任何其他更改。

  2. 如果您的补丁文件已经很奇怪,或者您想一次进行几个可能的修复,则可以纠正许多编码问题(到ascii),包括行尾(CR或CRLF到LF):

    dos2unix -k YOURPATCHFILE

    您可能需要从操作系统的程序包管理器中安装dos2unix二进制文件。即

    • 基于Debian / Ubuntu的: sudo apt install dos2unix
    • Fedora / RHEL / CentOS: sudo yum install dos2unix
    • MacOS(带Brew): brew install dos2unix
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.