Mercurial いろいろ

MQ の基本

Mercurial MQ について - daily dayflower http://d.hatena.ne.jp/dayflower/20090520/1242794877

設定

%userprofile%\Mercurial.ini に MQ を使うように設定する。
コンソールでの色付けがあると便利なので color も一緒に。

[extensions]
mq=
color=
hg qinit
hg qnew homu #作業履歴を放り込むパッチ homu を指定
hg qrefresh -m "ほむほむ" #homu に作業履歴を放り込む git add。実行するたびに homu を更新。-m でコメント
hg qseries -s #パッチスタックがどのようになっているか調べる。-sでコメントも表示
hg qnew homuhomu #新しく作業履歴を放り込むパッチ homuhomu を指定

MQ で履歴改変

http://d.hatena.ne.jp/ursm/20080914/1221397471

hg qimport -r 1:tip # すべてのリビジョンをパッチ化
hg qapplied -s # コメント付きでパッチを一覧表示
hg qgoto 1.diff # 一つ目のパッチに移る
修正
hg qrefersh -e # 変更をパッチに適用。-e でコメント変更のためにエディタ起動
hg qpush -a # -a ですべてのパッチを適用。
hg qfinish -a # changeset へ適用

hg push で規定の場所へ push

.hg/hgrc に

[paths]
default = ssh://hg@bitbucket.org/hokorobi/homu

git commit --amend っぽいもの

[2012-06-10 追記] 2.2.2 から commit --amend で OK


Windows なので、コマンドの間は &&

hg qimport -r tip && hg qrefresh -e && hg qfinish tip

%userprofile%/Mercurial.ini の [alias] にこんなの追加

amend = !%HG% qimport -r tip && %HG% qrefresh -e && %HG% qfinish tip

commit 以降にリポジトリに追加されているファイルが変更されていたりすると、直前に commit したファイルだけでなくて、そのファイルも追加されてしまう。

WinMerge をマージツールにする

Slightly Stupid: Mercurial(TortiseHG)でWinMerge(日本語版)を使う http://shouldbeslightlystupid.blogspot.com/2009/11/mercurialtortisehgwinmerge.html


Mercurial.ini

[merge-tools]
winmergeu.args=/e /x /wl /ub /dl other /dr local $other $local $output
winmergeu.regkey=Software\Thingamahoochie\WinMerge
winmergeu.regname=Executable
winmergeu.fixeol=True
winmergeu.checkchanged=True
winmergeu.gui=True
winmergeu.diffargs=/r /e /x /ub /wl /dl '$plabel1' /dr '$clabel' $parent $child

[alias]
merge = merge -t winmergeu

rebase

REV を root にして rebase。ブランチは残しておく。

hg rebase -d REV --keepbranches

Mercurial.ini

[alias]
rebase = rebase --keepbranches

日本語ファイル名

Windows 以外で使いたいときは日本語ファイル名なんてつけるな! ということで、気にしない。


Mercurial.ini

[extensions]
win32mbcs=

[win32mbcs]
encoding = cp932

bookmarks

最近使ってないな。


Mercurial.ini

[extensions]
bookmarks=

[bookmarks]
track.current = True

WinMerge で diff

How to Use WinMerge as the Diff tool for Mercurial - Super User http://superuser.com/questions/23576/how-to-use-winmerge-as-the-diff-tool-for-mercurial


Mercurial.ini

[extensions]
extdiff=

[extdiff]
cmd.wdiff = C:\app\WinMerge\WinMergeU.exe
opts.wdiff = /e /x /ub /wl

コマンド

hg wdiff

Collapse Extension

CollapseExtension - Mercurial

コミットの結合。

hg collapse -r 2:3 とか。

現在のコミットと直前のコミットを結合する fold を登録

[alias]
fold = collapse -r ".^:."

Histedit Extension

HisteditExtension - Mercurial

[2012-11-14 追記] 2.3 から本体に取り込まれた。


git rebase -i みたいなの。
さかのぼって編集したいコミットまでを指定。

hg histedit 3

いちいちパイプでページャに渡すのメンドイ

[2012-06-10 追記] 2.2.1 から pager が Windows で動くようになった。

hg log | less は hg log だけにしたかったので tpager を使ってみた。pager はうまく動いてくれなかった。
http://d.hatena.ne.jp/hokorobi/20120119/1326978722

  • record 部分コミット
  • ci --close-branch -m "close" ブランチのクローズ
  • メッセージを日本語にする。環境変数 LANG = ja
[alias]
log = log -f
l = log -f
b = bookmark
gl = log -G -f
stm = status -m