読者です 読者をやめる 読者になる 読者になる

opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

mercurialのdiffについて

Mercurialのdiffコマンドについてメモ。ついでにパッチについてもメモ。

例えば

$ hg log
チェンジセット:   2:55c9fefe5a76
タグ:             tip
ユーザ:           opamp sando <opampg@gmail.com>
日付:             Mon Jan 23 17:51:30 2012 +0900
要約:             two

チェンジセット:   1:cfbc0e68b462
ユーザ:           opamp sando <opampg@gmail.com>
日付:             Mon Jan 23 17:50:57 2012 +0900
要約:             one

チェンジセット:   0:8488a416da0c
ユーザ:           opamp sando <opampg@gmail.com>
日付:             Mon Jan 23 17:50:39 2012 +0900
要約:             zero

というリポジトリがあって、現在とチェンジセット1 (真ん中) のコミットとの差分を取りたいと思ったら

$ hg diff -r 1 

とすればいい。
すると例えば

diff -r 55c9fefe5a76 -r cfbc0e68b462 a
--- a/a Mon Jan 23 17:51:30 2012 +0900
+++ b/a Mon Jan 23 17:50:57 2012 +0900
@@ -1,1 +1,1 @@
-aaaaao
+aaaaa
diff -r 55c9fefe5a76 -r cfbc0e68b462 b
--- a/b Mon Jan 23 17:51:30 2012 +0900
+++ b/b Mon Jan 23 17:50:57 2012 +0900
@@ -1,2 +1,2 @@
+bbbbbb
 cccccc
-deeeee

みたいな感じでdiffが表示される。いわゆるunified形式の差分ファイル。

では、次はリビジョン0と1の差分を出力してみる。

$ hg diff -r 0:1 

とする。

diff -r 8488a416da0c -r cfbc0e68b462 a
--- a/a Mon Jan 23 17:50:39 2012 +0900
+++ b/a Mon Jan 23 17:50:57 2012 +0900
@@ -0,0 +1,1 @@
+aaaaa
diff -r 8488a416da0c -r cfbc0e68b462 b
--- a/b Mon Jan 23 17:50:39 2012 +0900
+++ b/b Mon Jan 23 17:50:57 2012 +0900
@@ -0,0 +1,2 @@
+bbbbbb
+cccccc

となる。こんな具合に差分が取れる。当然これをファイルにリダイレクトすることで差分ファイルとして使える(patch)

※ "hg diff -r x:x" のあとにファイル名やディレクトリ名を指定するとそのディレクトリやファイルのみの差分を出力することもできる。




このdiff形式をパッチとしてファイルに当てるにはpatchコマンドを使う。

基本的な形は

$ patch < patchfile

である。これでパッチが当てられる。 ただしカレントディレクトリの設定に注意しないと失敗する
ちなみに "-d"もしくは"--directory=dirpath" オプションを使うことでカレントディレクトリを指定することも可能。
(つまり、-dなどを使えば実際にcdで移動しなくてもおkってこと)

詳しい使い方は

http://suen-study.blogspot.com/2011/02/linuxdiffpatch.html

http://x68000.q-e-d.net/~68user/unix/pickup?patch

などのサイト様を参考にすればいいかと。

manも参考になるかもしれない

$ man patch

してみるといいと思う。


ちなみに過去にdiffをwindows向けにビルドしてるのでそれを使えばcmdなんかからdiffコマンドが使えるようになる。
でもpatchコマンドはないです。
http://d.hatena.ne.jp/opamp_sando/20110618/1308392693

Firefox ブラウザ無料ダウンロード