Menu

#author("2017-04-17T02:59:03+00:00","default:haruki","haruki")
#author("2017-04-17T03:23:26+00:00","default:haruki","haruki")
* キーワード [#g4f06536]
- patch
- diff

* したいこと [#w5b1f86f]

パッチを作成して、あてる。

* どうやって [#i5d9a662]

** ファイル単位 [#f32fba65]

*** パッチを作成する [#be7f68b5]

 $ diff -u (変更前ファイル) (変更後ファイル) > (パッチファイル)

*** パッチをあてる(作成時と同じ相対パスで) [#u9e6a18f]

 $ cd (パッチを作成した時と同じ相対パス)
 $ patch -u -p0 < (パッチファイル)

*** パッチをあてる(対象ファイルのディレクトリで) [#uf27b90d]

 $ cd (対象ファイルが存在するディレクトリ)
 $ patch -u < (パッチファイル)

** ディレクトリ単位(対象パスが固定の場合) [#ve6b546c]

*** パッチを作成する [#n8bb9ffd]

 $ diff -ur (変更前ディレクトリのフルパス) (変更後ディレクトリ) > (パッチファイル)

*** パッチをあてる [#h9c2cd44]

 $ patch -u -p0 < (パッチファイル)

** ディレクトリ単位(対象パスが不定の場合) [#y03628ef]

*** パッチを作成する [#na796506]

 $ cd (変更前ディレクトリのひとつ上の階層)
 $ diff -ur (変更前ディレクトリ) (変更後ディレクトリ) > (パッチファイル)

こういう感じ

 $ cd /path/to/upper/
 $ diff -ur asis tobe > update.patch

*** パッチをあてる [#v201a18a]

 $ cd (対象ディレクトリ)
 $ patch -u -p1 < (パッチファイル)

* ノート [#c084197d]

パッチファイルはどこで作成してもよいが、変更前ファイルが対象ファイルと同じ名前でないと確認が入る。ので、''変更前ファイルは対象ファイルと同じ名前にしてパッチファイルを作成する''のが分かりやすい。

ディレクトリは階層を考えるのが少し面倒です。

- 対象ディレクトリのパスが固定の場合、フルパスでパッチを作成して -p0 オプションでパッチあてするのがよいと思います。

- 対象ディレクトリのパスが不定の場合、ひとつ上の階層でパッチを作成して -p1 オプションで1階層無視するのがよいと思います。

ひとつ上の階層にするのはパッチファイルの見栄えをよくするためだけですですwなので、
%%ひとつ上の階層にするのはパッチファイルの見栄えをよくするためだけですですw%%&color(blue){ディレクトリ名が固定されてしまうのは不便なので、対象ディレクトリをカレントにして作成、対象ディレクトリをカレントにしてあてる、がいいように思いました。};なので、

- カレントでパッチを作成して -p0 オプションでカレントでパッチあてできるようにするのもよいと思います。
- カレントでパッチを作成して -p0 オプションでカレントでパッチあてできるようにするの%%も%%&color(blue){が};よいと思います。

* 参考 [#n339b08c]
- [[LINUX忘却録 diff / patch>http://linux.blog.kaone.net/linux%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/diff%20-%20patch]]
- [[すえん学録: Linuxでのパッチの作り方(diff)と使い方(patch)>http://suen-study.blogspot.jp/2011/02/linuxdiffpatch.html]]