Macでファイル差分をチェックするツールopendiff
日付 タグ mac カテゴリ mac目次
Xcodeをインストール済みだと使えるコマンドopendiff
開発ツールXcodeをインストールしている環境であれば、差分を取るのに便利なコマンドがopendiff。
まだ開発ツールXcodeを入れていない人は、開発ツールXcodeをMacのAppストアからインストールしよう。
https://apps.apple.com/jp/app/xcode/id497799835 - Mac App Store (Xcode)
なお、Xcodeはインストールによってそれなりにディスク容量を消費するので、Xcodeをインストールはしたくないけど、差分を取りたい場合はBBEditなどの別のツールを使って差分を取るのが良いだろう。
opendiffでディレクトリごと差分比較する
例えば、Hugoでブログサイトを作っていて、バックアップのためにどこか他のディレクトリに
ディレクトリごとcp-r
でコピーしていた場合、そのあと、どちらかだけを編集すると当然のように2つの
ディレクトリ間には差分が出来てしまう。
それらの差分をチェックしたい場合、Xcodeインストール済みの環境の場合であれば、opendiffが使えるようになっているはずなので、コマンドラインから以下のように比較対象のディレクトリを指定して、opendiffコマンドを叩いてみよう。
$ opendiff sample_dir1 sample_dir2
これによってFileMergeというウィンドウが立ち上がる。
なお、ファイル数の多いディレクトリ同士のチェックには多少の時間がかかる場合がある。
ここでディレクトリ間の差分として検出されたものはグレーアウトされていないものになるので、.gitmodules
ファイル、config.toml
ファイル、themes
ディレクトリに差分あり、と判断されたことになる。
ファイル数が多い場合は、右のメニューにある、Exclude項目でIdenticalにチェックを入れると、差分のないファイルは表示されなくなるので、 差分にだけ注目したい場合は、Identicalを除外すればいい。
さて、これで差分のあるファイルやディレクトリがわかったので、あとは差分のある対象ファイルを選択すれば実際の差分がどのようなものか表示される。
ここではconfig.tomlに差があるので、それを選択してチェック。
この例では
sample_dir1/my-new-blog/config.toml
sample_dir2/my-new-blog/config.toml
において、baseURLの行とtitleで違いがあることがわかる。
opendiffでは、差分があった場合、それぞれのどちらの行を採用するのか指定してマージしたファイルを生成することが可能だ。
例えば、baseURLではsample_dir1/my-new-blog(左のファイル)側を利用したい場合、
下のActionsから「Choose left」を選択する。
比較ウィンドウにおける1番目の矢印が左向きになり、下部に表示されているマージ結果のエリアでは、 baseURLは左ファイルの内容、titleは右ファイルの内容になる。
下部に表示されているマージ結果の内容を保存したい場合は、
「File」>「Save Merge As …」から
保存したいファイル名を指定すればOK。
さて保存したファイルを見てみれば、
$ cat config_merge.toml
baseURL = "http://example.org/"
languageCode = "en-us"
title = "Title was changed"
確かにマージ領域に表示されていた内容通りに保存されたファイルになっている。
opendiffでファイル単位で差分を比較する
先ほどはディレクトリ単位ごとの差分比較をしたが、ファイル単位での比較も同様にできる。
先ほどの例で出てきたconfig.toml
ファイルを比較したい場合、比較したい対象のファイルをopendiffに引数として与えれば良い。
$ opendiff sample_dir1/my-new-blog/config.toml sample_dir2/my-new-blog/config.toml
ファイル同士の場合は、最初からファイル差分の比較ウィンドウが立ち上がる。
差分をマージしたファイルを作りたい場合は先ほど見てきた方法と同様に「Actons」から左 or 右を選択してマージファイルを保存すれば良い。
以上がopendiffの基本的な使い方になるが、Macの差分比較ツールの中では使い勝手の良い差分比較ツールなのでXcodeをインストール済みの人は使うと便利である。