「パッチが行の途中で予期せず終了する」とはどういう意味ですか?

「パッチが行の途中で予期せず終了する」とはどういう意味ですか?

これは私のパッチコマンドの出力です。

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を言うの?この問題の原因を調べるには、パッチファイルに何がありますか?

答え1

メッセージはHunk 16を示します。

これGitHub議論あなたの問題に関連している可能性があります。

これはおおよそパッチが予期せず行の途中で終了します。git 生成 diff をパッチで使用すると、CRLF (キャリッジリターン、改行) の問題によって発生するメッセージです。

結論を引用するには:

[..] gitは行末に非常に面倒です。あなたは窓にいますか?それにもかかわらず、git設定でautocrlfを設定する必要があります。 Windowsでは「true」を、MacまたはLinuxでは「input」[..]を使用する必要があります。

記事から行末処理GitHubは上記の説明を詳しく説明しました。

答え2

使用しない場合git(@maxslepzigの説明はパッチコンテキストでパッチを使用することですgit)、ファイルの末尾にキャリッジリターンを追加してみてください。私はそうしてpatchパッチを受けました。

答え3

この非常に古い議論に追加すると、次のようになります。

OPで指摘された警告を引き起こす問題は、通常、行末の問題によって引き起こされます。

patch 〜したいファイルの終わりを確認するための末尾の改行(LF)(そして均一なdiffが意図せずに切り捨てられる可能性について警告)

  1. 編集のためにファイルを開かずに正しい改行を追加するには(エディタの設定に従って行末を変更したり、末尾の行/スペースを削除したりできます)、次のように簡単に実行できます。

    echo -e "\n" >> YOURPATCHFILE

    これにより、他の変更なしにファイルの末尾に改行文字が追加されます。

  2. パッチファイルがすでに奇妙な場合、または一度に複数の可能な修正を実行したい場合は、エンコード(ascii)を使用して行末(CRまたはCRLFからLFへ)を含む多くの問題を修正できます。

    dos2unix -k YOURPATCHFILE

    オペレーティングシステムのパッケージマネージャからdos2unixバイナリをインストールする必要があるかもしれません。

    • Debian/Ubuntu ベース:sudo apt install dos2unix
    • Fedora/RHEL/セントOS:sudo yum install dos2unix
    • MacOS(Brewを含む):brew install dos2unix

関連情報