photo credit: duncanmm via photopin cc
Windowsでいう○○ってアプリはMacでは何?
これ、WindowsからMacに移行してきたユーザーは度々この手のことを調べるので時間がかかりますよね。
今回はWindowsのWinMergeというファイルの比較、マージなどを行うツールです。
本当はdiffでさくっと、patchまで作っちゃってとか、もの凄く憧れますが、ヘタレな僕はやはり、GUIでやりたい!
で、ちょっと調べるとMacでWinMerge相当の事をしたいのであれば、FileMergeが良いようです。
FileMergeはXcodeをインストールすれば使えるようです。
Xcodeのインストール
XcodeはApple製品のソフトウェアを開発するためのアップルの統合開発環境です。
Xcodeのインストールについてはこのあたりが詳しく解説されています。
FileMergeの起動方法
Xcodeのインストールが終わったら、Xcodeを起動し、Xcodeのアイコンを右クリックしてFileMergeを起動します。
FileMergeは日本語が使えないの?
開発環境「Xcode Tools」付属の差分表示ツール「FileMerge」をUTF-8対応に
このあたりの情報を見て、てっきりFileMergeは日本語が使えないのかと思って、やれiconvだ、やれnkfの方がいいだとか色々調べていたのですが、なんと!
OSX 10.5からはデフォルトで日本語に対応しているようです。
デフォルトで日本語に対応しているようです。大事なので2回言いました。
いやー、情報って水物ですね。怖い怖い。
よく、食べログ見て良さそうだと思った店に行ったら、つぶれてたとか、場所が変わってたとか無いですか?
僕はこの手のこと結構あります。それ以来ちゃんと裏を取ってから行くようにしています。
FileMergeをしばらく使ってみて
どうでしょうか。なかなかシンプルで見やすく、当初の目的であったWinMergeのようなツールと言えるのではないでしょうか。
diffコマンドの備忘録
漢はdiffでさくさくpatchだべってことで、これ以降、diffコマンドの備忘録とさせて頂きます。
diffでディレクトリ単位で違いのあるファイルの一覧だけ欲しいんだけど?
$ diff -rq 比較対象1 比較対象2 # -r ディレクトリを再帰的に検索 # -q 違いのあるものだけ出力 Only in target1dir: .DS_Store Only in target1dir: about.php Files target1dir/ad.php and target2dir/ad.php differ Only in target1dir: ad2.php Files target1dir/functions.php and target2dir/functions.php differ Only in target1dir: functions.php.org Files target1dir/header.php and target2dir/header.php differ Files target1dir/home.php and target2dir/home.php differ Only in target1dir/images: .DS_Store Only in target1dir/images: headh1.png Only in target1dir/images: pr_button.png Files target1dir/images/rogo.ico and target2dir/images/rogo.ico differ Only in target1dir/images: topih2.png Only in target1dir/images: topih3.png Only in target1dir/images: wishlist.jpg Files target1dir/sidebar.php and target2dir/sidebar.php differ Files target1dir/single.php and target2dir/single.php differ Files target1dir/smart.css and target2dir/smart.css differ Files target1dir/style.css and target2dir/style.css differ
そうするとこんな感じに出力されます。
なんか格好いい!でも、見づらい。
差異ののあるファイルとどちらかにしか存在しない、ファイルがごっちゃになってるから見づらいんですかね?
では、パイプでsortしましょう。
$ diff -rq target1dir target2dir | sort Files target1dir/ad.php and target2dir/ad.php differ Files target1dir/functions.php and target2dir/functions.php differ Files target1dir/header.php and target2dir/header.php differ Files target1dir/home.php and target2dir/home.php differ Files target1dir/images/rogo.ico and target2dir/images/rogo.ico differ Files target1dir/sidebar.php and target2dir/sidebar.php differ Files target1dir/single.php and target2dir/single.php differ Files target1dir/smart.css and target2dir/smart.css differ Files target1dir/style.css and target2dir/style.css differ Only in target1dir/images: .DS_Store Only in target1dir/images: headh1.png Only in target1dir/images: pr_button.png Only in target1dir/images: topih2.png Only in target1dir/images: topih3.png Only in target1dir/images: wishlist.jpg Only in target1dir: .DS_Store Only in target1dir: about.php Only in target1dir: ad2.php Only in target1dir: functions.php.org
おおっ、これは見やすい!
が、 .DS_Store ってなんでしょう?
『.DS_Store』って何?
ググりました。Macのシステムファイルらしいです。
うおっ、最高にいらない…
必要ないのは、さくさくっと一括削除しましょう。
『.DS_Store』を一括で削除したい
$ find ./ -name '.DS_Store' | xargs rm
さて、再び!
$ diff -rq target1dir target2dir | sort Files target1dir/ad.php and target2dir/ad.php differ Files target1dir/functions.php and target2dir/functions.php differ Files target1dir/header.php and target2dir/header.php differ Files target1dir/home.php and target2dir/home.php differ Files target1dir/images/rogo.ico and target2dir/images/rogo.ico differ Files target1dir/sidebar.php and target2dir/sidebar.php differ Files target1dir/single.php and target2dir/single.php differ Files target1dir/smart.css and target2dir/smart.css differ Files target1dir/style.css and target2dir/style.css differ Only in target1dir/images: headh1.png Only in target1dir/images: pr_button.png Only in target1dir/images: topih2.png Only in target1dir/images: topih3.png Only in target1dir/images: wishlist.jpg Only in target1dir: about.php Only in target1dir: ad2.php
おっ、これで見通しが良くなりました。
Files 〜 differが9つなので、9個のファイルをちまちま diff するだけです。
diff するだけです。
$ diff target1dir/style.css target2dir/style.css 1c1 < /*--------------------------------------------------------- --- > /*--------------------------------------------------------- 6c6 < Version: 20130815 --- > Version: 20130825 32,33c32 < /* font-family: arial,helvetica,osaka,"MS PGothic",sans-serif; */ < font-family:'Helvetica Neue',Arial,Tahoma,sans-serif; --- > font-family: arial,helvetica,osaka,"MS PGothic",sans-serif; 182a182,215 > img.alignright { > display: block; > margin: 0 0 0 auto; > } > > img.alignleft { > display: block; > margin: 0 auto 0 0;
…うーん。やっぱりマージする自信ない…
$ vimdiff target1dir/style.css target2dir/style.css
おっ、これ格好いい!これで行きます。
覚えておきたいコマンドは4つだけ!
-
- do
カーソルの位置にもう一方のファイルの差分を取り込む
覚え方は、diff obtain
obtain 〜を得る
-
- dp
カーソルの位置の差分をもう一方のファイルに取り込ませる。
diff put
-
- ]c
次の差分へ移動する
-
- [c
前の差分へ移動する
さて、頑張ってマージ作業に勤しみます。
vimついでに…
この本、ものすごくおすすめです。
僕も今、この本で猛勉強中です。
コメント