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


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を指しますか?これを引き起こしている原因を特定するために、パッチファイルで何を探すことができますか?

回答:


11

メッセージはHunk 16を参照しています。

このGitHubの議論はおそらくあなたの問題に関連しています。

パッチが突然ラインの途中で終了するため、CRLF(キャリッジ・リターン、改行)のメッセージgitの発生差分をパッチと一緒に使用されている問題。

結論を引用するには:

[..] gitは行末について非常にうるさい場合があります。あなたは窓にいますか?いずれにしても、おそらくgit configでautocrlfを設定する必要があります。Windowsを使用している場合は「true」を使用し、macまたはlinuxを使用している場合は「input」を使用する必要があります[..]

記事の行末の処理 GitHubで上記のステートメントの詳細を説明しています。


1
注意すべきは、質問者はこれは悪いことだと尋ねた-行の途中で終わることは問題ではなく、ただの警告だ。
ロス14

3

使用していない場合git(@maxslepzigのコメントはのコンテキストでパッチを使用することに関するものでしたgit)、ファイルの最後に改行を追加してみてください。私はそれをして、patch私のパッチを受け入れました。


2

この非常に古い議論に追加するには:

OPが指摘した警告につながる問題は、通常、行末の問題が原因です。

patch 欲しいファイルの終わりを決定するために、末尾の改行(LF)を(と誤って切り捨てられていunified diff形式を警告)

  1. 編集のためにファイルを開かずに適切な改行を追加します(エディターの設定に応じて、行末を変更したり、末尾の行/スペースを削除したりすることがあります)。

    echo -e "\n" >> YOURPATCHFILE

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

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

    dos2unix -k YOURPATCHFILE

    OSのパッケージマネージャーからdos2unixバイナリをインストールする必要がある場合があります。すなわち

    • Debian / Ubuntuベース: sudo apt install dos2unix
    • Fedora / RHEL / CentOS: sudo yum install dos2unix
    • MacOS(醸造付): brew install dos2unix
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.