Linux で、パッチを作る、パッチを当てる。

diff と patch コマンドを使う。対象のソースが入ったオリジナルのディレクトリを test とすると、以下の手順の通りにする。
  1. 変更後のソースが入ったディレクトリを test.new に名前を変更する。
  2. ~/temp といった感じで作業用のディレクトリを作る。
  3. オリジナルのディレクトリ test と変更後のソースが入ったディレクトリ test.new の2つを ~/temp にコピーする。これによって ~/temp/test と ~/temp/test.new が作られる。
  4. cd ~/temp とする。
  5. diff -urN test test.new >test.patch
ここで、diff -urN ... のオプション「-urN」の意味は、u が unified diff 形式(c にするとcontext output format 形式)、r がサブディレクトリも対象(だから必ずつけた方がいい)、N はディ レ クトリ単位の比較の時に、片方のディレクトリにだけ存在するファイルに関しては、他のディレクトリでは空のファイルがあるものとして扱う、つまり「余分なファイルは比較しない」ってことだから、これも付ける。 diff を実行すると ~/temp/test.patch というファイルが出来上がっているはずで、これがパッチファイル(テキストエディタで開ける)となる。 さて、パッチができたらパッチを当ててみよう。対象となるのは、上で用意した ~/temp/test というディレクトリで、
  1. cd ~/temp で ~/temp に移動する。
  2. patch -p0
これだけで ~/temp/test のディレクトリが ~/temp/test.new と同じ内容になる。 パッチを当てる方の patch -p0 ... の「-p0」というオプションは、-p に続く数字のゼロがカレントディレクトリを表している。-p1 とか、番号を増やしていくと、パッチファイルの中に記述されているディレクトリ階層の、サブディレクトリが起点となる。たとえば patch -p1 < test.patch とすると、カレントディレクトリを test/dir1 と読み替えるという意味となる。
トラックバック URL: https://perltips.twinkle.cc/trackback/145