リネームを自動検出する
posted by Steve Losh on September 30, 2009
hg addremove コマンドは、大量のファイルを手作業で移動する時に便利です。
適当なインターフェース(ファインダー、 Windows エクスプローラ、シェル等)
を使ってファイル構成を変えた後、 hg addremove を実行すると
Mercurial が変更点を把握します。
あまり知られていませんが、 hg addremove には、ファイルの移動やリネームを検出し、
その操作を別個の追加・削除ではなくリネームとして記録する機能があります。
操作をリネームとして記録すると、 Mercurial はよりスマートに変更内容をマージできるようになります。
Mercurial にリネームを検出させるには、 hg addremove コマンドに
--similarity オプションを指定します:
$ hg addremove --similarity 100
値はパーセントです。この例では、 Mercurial は追加したファイルが削除したファイルと全く同じ(100% 似ている) 場合のみ、対になった追加・削除をリネーム操作として扱います。
100% 未満の値を指定すると、 リネーム後に修正を加えたファイルも検出することができますが、 誤検出のリスクが増加してしまいます。ファイルやディレクトリ構成の変更はひとつのコミットにまとめ、 各ファイルの 内容 の修正は別のコミットにするのが適切なやり方です。
--similarity 100 を頻繁に使うようであれば、次のように
~/.hgrc ファイルを修正し、デフォルトにしましょう:
[defaults]
addremove = --similarity 100
[defaults] は、コマンドを実行するもの 全て に影響することに注意しましょう。 スクリプトから実行した場合も該当します!