
これは私のパッチコマンドの出力です。
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が意図せずに切り捨てられる可能性について警告)
編集のためにファイルを開かずに正しい改行を追加するには(エディタの設定に従って行末を変更したり、末尾の行/スペースを削除したりできます)、次のように簡単に実行できます。
echo -e "\n" >> YOURPATCHFILE
これにより、他の変更なしにファイルの末尾に改行文字が追加されます。
パッチファイルがすでに奇妙な場合、または一度に複数の可能な修正を実行したい場合は、エンコード(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
- Debian/Ubuntu ベース: