web-dev-qa-db-ja.com

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

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

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

14
Paul Biggar

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

この GitHubディスカッション はおそらく問題に関連しています。

Gitで生成された差分をパッチで使用すると、CRLF(キャリッジリターン、ラインフィード)の問題により、patchが予期せず行の途中で終了します

結論を引用すると:

[..] gitは行末について非常にうるさい場合があります。あなたは窓にいますか?とにかく、git設定でautocrlfを設定する必要があります。 Windowsを使用している場合は「true」が必要です。MacまたはLinuxを使用している場合は、「input」を使用する必要があります[..]

記事では 行末処理 GitHubが上記のステートメントについて詳しく説明しています。

11
maxschlepzig

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

3
Avery Chan

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

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

patchwantsファイルの終わりを判断するための末尾のラインフィード(LF)(および誤って切り捨てられた可能性のある統合された差分を警告)

  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付き):brew install dos2unix
2
ChrisN