Linux diff による差分ファイル作成 + patch によるファイルの差分からファイルの変更

  • ガイド ( How to )
  • 閲覧数:16
  • ありがとう数:0

はじめに

diff で、差分ファイルを作成し、patch で、差分ファイルからファイルの変更を行うための流れを説明します。 diff/patch とは diff というのはファイルの差分を作成するツール、 patch というのはファイルの差分からファイルの変更を再現するツールです。通常 diff で作った差分ファイルをパッチ(ばんそうこう)と呼びます。

STEP1パッチの作成

パッチは diff を用いることで作成できます。この際 -c オプションを付けるほうが良いようです。 -c オプションを付けると変更部分の前後関係も記録する context 形式の差分が作成されるためより正確にパッチを適用できます。

ファイル単位のパッチ作成

1ファイル毎にパッチを作成するには以下のようにします。 FROM_FILE の所に変更前のファイル名、 TO_FILE の所に変更済みのファイル名、 PATCH_FILE の所に作成するパッチのファイル名を書きます。

diff -c FROM_FILE TO_FILE > PATCH_FILE

ディレクトリ単位のパッチ作成

ディレクトリの中にある複数のファイルに対して一度にパッチを作成するには以下のようにします。 FROM_DIRECTORY の所に変更前のファイルが入っているディレクトリ名、 TO_DIRECTORY の所に変更済みのファイルが入っているディレクトリ名、 PATCH_FILE の所に作成するパッチのファイル名を書きます。

diff -c FROM_DIRECTORY TO_DORECTORY > PATCH_FILE

ディレクトリ以下を全てパッチ作成

ディレクトリ以下のファイル全てについてパッチを作成する場合は以下のようにします。

diff -cr FROM_DIRECTORY TO_DORECTORY > PATCH_FILE

※ -r オプションを加えるとディレクトリ以下を階層的に検索してくれます。

ディレクトリ単位のパッチ(追加/削除ファイルも記録)

上記の方法では一方にしか存在しない、つまり追加または削除されたファイルは記録されません。追加または削除されたファイルも記録するためには以下のようにします。

diff -crN FROM_DIRECTORY TO_DORECTORY > PATCH_FILE

※ -N オプションは、ディレクトリを比較する際、片方のディレクトリにのみファイルが存在していたらもう片方のディレクトリには同名の空っぽのファイルがあるように動作します。

STEP2パッチの適用

パッチは patch を用いることで適用できます。

ファイル単位のパッチ

適用したいファイルの存在するディレクトリ上で以下のようにします。変更前のファイルはファイル名末尾に .org が付加されて保存されます。

patch < PATCH_FILE

ディレクトリ単位のパッチ

パッチを作成したときと相対的に同じディレクトリにて以下のようにします。

patch -p0 -d . < PATCH_FILE

-p オプションは差分作成時の相対ディレクトリを有効にします (-p がないとパッチを作成したときと相対的に同じディレクトリにて以下のようにします。

patch -p0 -d . < PATCH_FILE

-p オプションは差分作成時の相対ディレクトリを有効にします (-p がないと全てのファイルがカレントディレクトリにあると仮定されます)。 -p の後ろの 0 は差分ファイルに記録されている相対ディレクトリを全て有効にするという意味です。 1、2 と増えていくと、記録された相対ディレクトリが頭から1つづつ削られます (例 : -p1 だと usr/local/src → local/src、-p2 だと usr/local/src → src)。全てのファイルがカレントディレクトリにあると仮定されます)。 -p の後ろの 0 は差分ファイルに記録されている相対ディレクトリを全て有効にするという意味です。 1、2 と増えていくと、記録された相対ディレクトリが頭から1つづつ削られます (例 : -p1 だと usr/local/src → local/src、-p2 だと usr/local/src → src)。

このユーザなら私の疑問や悩みを解決してくれそうと思ったら、
質問への回答をリクエストすることができます。

関連するタグ

ピックアップ

ページ先頭へ