Engineer in Tokyo

Mercurial MQ

最近 mercurial の mq エクステンションを試しに使ってる。mercurialのリビジョンをコミットする前に、変更を管理したい、もしくは、途中で他の作業をやらないといけないので、今の変更をどっかに置かないといけない場合に便利なエクステンションです。

mq は標準に入っているので、インストールしなくてもいいだが、エクステンションを.hgrcで有効しないと。

[extensions]
mq =

それで、コマンドを巡回する。パッチキューを初期化する。

hg qinit

新しいパッチを作る。これは変更がない状態で実行しないといけないので、ちょっと面倒くさい。

hg qnew

もし、qnewを忘れた場合、変更を置かないと。これは面倒くさい。もし、もっといい方法があれば、教えてください。たまに、windows のeol と unix の eol が両方 my.diff に入ってしまって、patch がちゃんと適用することが出来ない場合がある。ご注意

hg diff -U > my.diff
hg revert --all
hg qnew mypatch
patch -p1 < my.diff

Update: -f で現在の変更を含めて新しいパッチを作れる。上の処理を下のコマンドで同じことができる。

hg qnew -f mypatch

ここで、変更を行って、patch を更新するコマンドはqrefresh. これを実行するのと、hg statusを実行すると何もでない。パッチの内容も hg view で見れる。

hg qrefresh

コミットするときの、コミットメッセージは分かりにくいだが、 qrefresh で指定する。

hg qrefresh -e

一回指定すれば、コミットするときに、書いたメッセージを使う。

パッチを置かないといけない場合は、qpop を使う。

hg qpop mypatch

もしくは、

hg qpop -a

パッチをまた適用する qpush

hg qpush mypatch

もしくは、

hg qpush -a

パッチをリポジトリにコミットする場合は、qfinish

hg qfinish mypatch

もしくは、全てをコミット

hg qfinish qbase:qtip