diff
の出力は
変更前と変更後の
二つのファイルの「違い」を
表すファイルだよね?
そのとおり!
変更前のファイルとパッチから
変更後のファイルを
作ることができるんだ
今回はそんなパッチの
扱いを学んでいこう!
前回は以下のコマンドで
比較するための二つのファイル
a.txt
と b.txt
を作ったね!
cat > a.txt << EOF
111
222
333
444
555
666
777
888
999
EOF
cat > b.txt << EOF
111
333
444
555
656
777
888
999
000
EOF
それではこれらの差分をパッチ
ab.patch
にしよう!パッチは unified diff 形式が一般的だよ
-u
オプションを指定して出力しようdiff -u a.txt b.txt > ab.patch
うん!出力したよ!中身はこんな感じみたい…
cat ab.patch
--- a.txt 2025-05-12 17:25:22.302944148 +0900
+++ b.txt 2025-05-12 17:25:38.967887343 +0900
@@ -1,9 +1,9 @@
111
-222
333
444
555
-666
+656
777
888
999
+000
diff 形式との大きな違いは比較した二つのファイル名が出力に含まれていることだよ
言われてみれば…!diff 形式は差分内容しか出力されていなかったね
patch
コマンドこのパッチ
ab.patch
をa.txt
に反映させるにはどうすればいいのかな?patch
はファイルにパッチを適用するよ書式で覚えるよりも入力リダイレクトで使うと覚えよう!以下のように実行してみてね
patch < ab.patch
どれどれ?
patching file a.txt
a.txt
ファイルにパッチを当てています」unified diff 形式の内容にはファイル名も含まれているのでパッチファイルを入力リダイレクトするだけで処理してくれるんだよ
もう
a.txt
の内容はパッチが当てられたのかな?それは中身を表示させて確認してみよう!
cat a.txt
うん!
111
333
444
555
656
777
888
999
000
変更されたっぽいけど内容は合っているのかな?
せっかく
diff
を覚えたのだからパッチを当てた a.txt
とb.txt
を比較してみようちゃんとパッチが当たっていれば二つのファイル内容に差はないはずだよ
おー!人間の目で見比べるとミスが怖いよね機械的に処理できるのなら
diff
に任せよう!diff a.txt b.txt
うん!何も表示されない!ということは差が無いんだね!ちゃんとパッチが当たっていたよ
今回はパッチの扱いを学んだよ!
diff
の -u
オプションでunifided diff 形式のパッチを出力してpatch
でパッチを適用できるんだ!ソフトウェア配布などではパッチも一緒に提供されていることがあるよ大元のファイルが手元にあればパッチをダウンロードして適用するだけで新しいバージョンにすることができるんだ