これは私のパッチコマンドの出力です:
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を参照していますか?これを引き起こしている原因を突き止めるために、パッチファイルで何を探すことができますか?
メッセージはハンク16を参照しています。
この GitHubディスカッション はおそらく問題に関連しています。
Gitで生成された差分をパッチで使用すると、CRLF(キャリッジリターン、ラインフィード)の問題により、patchが予期せず行の途中で終了します。
結論を引用すると:
[..] gitは行末について非常にうるさい場合があります。あなたは窓にいますか?とにかく、git設定でautocrlfを設定する必要があります。 Windowsを使用している場合は「true」が必要です。MacまたはLinuxを使用している場合は、「input」を使用する必要があります[..]
記事では 行末処理 GitHubが上記のステートメントについて詳しく説明しています。
git
を使用していない場合(@maxslepzigのコメントは、git
のコンテキストでパッチを使用することに関するものでした)、ファイルの最後に改行を追加してみてください。私はそれを行い、patch
は私のパッチを受け入れました。
この非常に古い議論に追加するには:
OPが指摘した警告につながる問題は、通常、行末の問題が原因です。
patch
wantsファイルの終わりを判断するための末尾のラインフィード(LF)(および誤って切り捨てられた可能性のある統合された差分を警告)
編集のためにファイルを開かずに、適切な改行を追加します(エディターの設定によっては、行末が変更されるか、末尾の行/スペースが削除される場合があります)。次のような簡単な操作を実行できます。
echo -e "\n" >> YOURPATCHFILE
これにより、他の変更を加えることなく、ファイルの最後に改行文字が追加されます。
パッチファイルが既に変である場合、またはいくつかの可能な修正を一度に実行したい場合は、行末(CRまたはCRLFからLF)を含む(ASCIIへの)エンコーディングに関する多くの問題を修正できます。
dos2unix -k YOURPATCHFILE
OSのパッケージマネージャからdos2unixバイナリをインストールする必要がある場合があります。つまり.
Sudo apt install dos2unix
Sudo yum install dos2unix
brew install dos2unix