patchコマンドを今までLinux上でしか使ったことがなかったので、Windows上のGit Bashで使ってみました。
用意したサンプルファイル
sample1
1.あめ 2.さくらんぼ 3.たけのこ 4.はまち 5.まつたけ
sample2
1.あめ 2.かまぼこ 3.さくらんぼ 4.たけのこ 5.なす 6.はまち
「最終行は改行してから保存してください」とネット上に書かれていたので、2つのファイルとも、そのようにしてあります。
diffでpatchを作成
diff -u sample1 sample2 > sample.patch
diffコマンドを使って、sample.patchを作りました。
改行コードに関する疑問
パッチファイルと、パッチの適用対象の改行コードが異なるとエラーになる場合があるので、sample.patchの改行コードをLF(UNIX形式)から、CRLF(Windows形式)に変更しました。
つまり、sample1、sample2、sample.patchの全てがCRLFです。
それからパッチを当てました。
patch -u < sample.patch
以下のエラーが表示されました
patching file sample1 Hunk #1 FAILED at 1 (different line endings). 1 out of 1 hunk FAILED -- saving rejects to file sample1.rej
そこで、改行コードを変更して実験してみることにしました。
sample.patchの改行コードはLFのまま
diff -u sample1 sample2 > sample.patch
を実行した時点では、sample.patchの改行コードはLF(UNIX形式)です。
一方、sample1の改行コードはCRLF(Windows形式)です。
この状態で
patch -u < sample.patch
を実行したところ、特に問題なくパッチを当てることができました。
sample1の改行コードをLFにした
今度は、あらかじめsample1とsample2の改行コードをLF(UNIX形式)に変更しておきました。それから
diff -u sample1 sample2 > sample.patch
を実行しました。
つまり、sample1、sample2、sample.patchのの全てがLFです。
この状態で
patch -u < sample.patch
を実行したところ、特に問題なくパッチを当てることができました。
結論
sample.patchの改行コードがLFの状態でパッチを当てれば問題なさそう。
問題が生じたら、sample1とsample.patchの改行コードをLFに揃えておけば良さそう。
sample.patchの中身
以下はsample.patchの中身です。このパッチを適用することで、sample1の内容がsample2と同じになります。
sample.patchの中身
--- sample1 2025-07-16 16:30:54.649319000 +0900 +++ sample2 2025-07-16 16:30:54.665212400 +0900 @@ -1,6 +1,7 @@ 1.あめ -2.さくらんぼ -3.たけのこ -4.はまち -5.まつたけ +2.かまぼこ +3.さくらんぼ +4.たけのこ +5.なす +6.はまち
パッチを当てる前のsample1
1.あめ 2.さくらんぼ 3.たけのこ 4.はまち 5.まつたけ
パッチを当てた後のsample1
1.あめ 2.かまぼこ 3.さくらんぼ 4.たけのこ 5.なす 6.はまち
sample2(再掲)
1.あめ 2.かまぼこ 3.さくらんぼ 4.たけのこ 5.なす 6.はまち