TortoiseHgでMQ

MercurialにはMQというGitには無い機能がある。内容としてはGitのインデックスにちょっと近いかも。

この機能は簡単にいえばパッチ管理なのだが理解しづらい。以下のエントリが一番わかりやすい。
Mercurial MQ について - daily dayflower

このエントリの流れをTortoiseHgでやってみたので、スクリーンショットをべたべたはってみた。

初期状態

カクテルを追加します。

ここで普通にコミットするのではなくQNewにadd_menuを指定してQNewします。

そうするとこんな感じ。add_menuというパッチが登録されました。

リポジトリエクスプローラはこんな感じ

こんどはワインを追加して、QRefreshします。

リポジトリエクスプローラはこんな感じ。コミットとは異なりQRefreshは積算しメッセージは上書きされます。

リポジトリエクスプローラでPatch Queueを有効にするとパッチの状態を見ることができます。

こんどはadd_beerパッチでビールを追加します

リポジトリエクスプローラはこんな感じ。add_menu, add_beerの順番にパッチが適用されています。

ここでワインのスペルが間違っていることに気づいたので修正します。add_menuがあたった状態までGotoします。

add_menuのパッチはあたっていて、add_beerはあたってない状態になります。add_beerをpopしても同じです。

この状態でワインのスペルを修正してQRrefreshします。

リポジトリエクスプローラはこんな感じ。

この状態でqpushしてadd_beerを適用すると失敗します。

修正してQRefreshします。

リポジトリエクスプローラはこんな感じ。

全パッチを未適用にするとこんな感じ

全適用にするとこんな感じ

qfinishするとコミットになります

コミットをまとめたい気がしたのでまずqimportします。qimportによってコミットからパッチへ変換できます。

ひとつめ

ふたつめ

最初のパッチは適用した状態にしてqfoldします

まとまりましたが、メッセージがいまいちなので変更してQRefreshします。

リポジトリエクスプローラはこんな感じ

qfinishします。

最終的なリポジトリエクスプローラはこんな感じ

シェルフだと履歴が追えないけどパッチなら履歴も追える。コミットをあとから編集したい場合もMQを使う。
ちなみにGitのgit commit --amendはMercurialではqimort,qrefresh,qfinishの流れ

参考
GitConcepts - Mercurial