MacでWinMergeのようなマージツール(アプリ)が使いたい!

mac windows IT
※当サイトにはプロモーションが含まれます。

photo credit: duncanmm via photopin cc

Windowsでいう○○ってアプリはMacでは何?

これ、WindowsからMacに移行してきたユーザーは度々この手のことを調べるので時間がかかりますよね。
今回はWindowsのWinMergeというファイルの比較、マージなどを行うツールです。

WinMerge

WinMerge 日本語版

本当はdiffでさくっと、patchまで作っちゃってとか、もの凄く憧れますが、ヘタレな僕はやはり、GUIでやりたい!

で、ちょっと調べるとMacでWinMerge相当の事をしたいのであれば、FileMergeが良いようです。
FileMergeはXcodeをインストールすれば使えるようです。

Xcodeのインストール

XcodeはApple製品のソフトウェアを開発するためのアップルの統合開発環境です。
Xcodeのインストールについてはこのあたりが詳しく解説されています。

Xcode開発環境のインストール

FileMergeの起動方法

Xcodeのインストールが終わったら、Xcodeを起動し、Xcodeのアイコンを右クリックしてFileMergeを起動します。

Xcode menu

FileMergeは日本語が使えないの?

開発環境「Xcode Tools」付属の差分表示ツール「FileMerge」をUTF-8対応に

このあたりの情報を見て、てっきりFileMergeは日本語が使えないのかと思って、やれiconvだ、やれnkfの方がいいだとか色々調べていたのですが、なんと!

OSX 10.5からはデフォルトで日本語に対応しているようです。
デフォルトで日本語に対応しているようです。大事なので2回言いました。

いやー、情報って水物ですね。怖い怖い。
よく、食べログ見て良さそうだと思った店に行ったら、つぶれてたとか、場所が変わってたとか無いですか?
僕はこの手のこと結構あります。それ以来ちゃんと裏を取ってから行くようにしています。

FileMergeをしばらく使ってみて

FileMerge merge

どうでしょうか。なかなかシンプルで見やすく、当初の目的であった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

おっ、これ格好いい!これで行きます。

vimdiff diff

覚えておきたいコマンドは4つだけ!

    • do

カーソルの位置にもう一方のファイルの差分を取り込む
覚え方は、diff obtain
obtain 〜を得る

    • dp

カーソルの位置の差分をもう一方のファイルに取り込ませる。
diff put

    • ]c

次の差分へ移動する

    • [c

前の差分へ移動する

さて、頑張ってマージ作業に勤しみます。

vimついでに…

この本、ものすごくおすすめです。
僕も今、この本で猛勉強中です。

スポンサーリンク
スポンサーリンク
ほしいものリスト
IT
nekokan BLOG

コメント

タイトルとURLをコピーしました