When it’s ready.

出来るまで出来ない

patch コマンドの使い方

今まで、”patch当ててね”見たいな差分テキストがあっても、見て見ぬ振りをしてきた。

さっきhttp://mattn.kaoriya.net/software/lang/python/20080424212547.htmのページをみて、またもや差分が載っていたので、patchの使い方を調べてみた。

意外と簡単な使い方だった、自分の為にメモ。

  • 環境
    • OSX 10.5.2
    • patch 2.5.8

#patchのバージョン調べたら”Copyright (C) 1988 Larry Wall” がでた。ちょっと感動した。

欲しい動作としては、持ってきたパッチを適用する、自分でパッチを作成するの2つを出来るようになりたい。
前提条件として
original.txt

this
is
a

pen

を変更して new.txtが作成されたとする

this
is
a

pen

on
the
table.


## パッチを作成する。
original.txt と new.txtの差分をnow_patchという差分ファイルを作成する

% diff -c original.txt new.txt > now_patch                                                                            [~/tmp/test]

作成されたファイルは

*** original.txt	2008-04-30 21:48:29.000000000 +0900
--- new.txt	2008-04-30 21:51:49.000000000 +0900
***************
*** 3,5 ****
--- 3,11 ----
  a
  
  pen
+ 
+ on
+ the
+ table.
+ 
+ 

こんな感じになっている。ひとまず成功か?

# パッチを適用する
今出来た、now_patchファイルをoriginal.txtと同じ階層に持ってきて、patchコマンドを実行する。

$ patch < now_patch
patching file new.txt
Reversed (or previously applied) patch detected!  Assume -R? [n] n
Apply anyway? [n] n
Skipping patch.
1 out of 1 hunk ignored -- saving rejects to file new.txt.rej

ノッフ。怒られた・・・
なんかよく分からんが、パッチが適用されてないしnew.txt.rejとかいう、意味不明なファイルも出来てしまった。
>new.txt.rej

***************
*** 3,5 ****
  a
  
  pen
--- 3,11 ----
  a
  
  pen
+ 
+ on
+ the
+ table.
+ 
+ 

結論

自分には、使うのはまだ早いのかも知れない。
パッチの中身をみて、手で直していくか・・・悲しいけど

手で直せない位複雑なのが出てきたら、また、勉強してみる