My blog

Add intelligent tagline here

[python]pyfes 2012.3に参加してきました。

pyfes 2012.3に参加してきました。pyfesは初めてで緊張しました。

Mercurial ハンズオン

とりあえず朝から来たら最初はハンズオンなんですねー。知りませんでした。なにに行こうか迷いましたが、Mercurialハンズオンに参加しました。

実は藤原さんがもういろいろ 公開されている のですが、その時に取ったメモを公開します。

tortoisehg

TortoiseHG便利です。というか、HG Workbenchですね。UNIX/Windows/Macどれでも動きます。Workbench使い始めてから、Linuxでもはっきり言ってコマンドラインをほぼ使わなくなりました。(必要であればHG Workbenchからコマンドシェルを開けるのでそこで叩きます。)

社内でgitとmercurialどちらを導入すべきかという議論になった時に決め手になったのはこのHG Workbenchが素晴らしく、かつ、Windowsで問題なく動くから、ということと言っても過言ではありません。ぜひ一度使ってみるといいと思います。

というか、むしろ「HG Workbenchの使い方」という資料を作ったほうがMercurialを使う人が増えるかもしれませんね。

Mergeのdiffを見る

A -+---- A1 -- A2 -- M --
   |                                |
   +- B1 -- B2 -------+

% hg update A2
% hg merge B2

というmergeをした時に綺麗にmergeされた場合、mergeコミット自体にはdiffが表示されない。

でも、ここでMで起きたmergeを知りたい場合、MとA2のdiffを取れば、それはすなわちBの変更全部とのdiffになる。

具体的にはこうやる感じ。

hg diff -r M^1 -r M

“^1” というのは第一親を指定する方式。Mの第一親はA2、第二親はB2となる。 仮に

hg diff -r M^2 -r M

とした場合、これはAのチェンジセット全体との差分となる。

qfinishした後にパッチに戻したい

hg qimport -r <リビジョン番号>

例: hg qimport -r 1:2 <-- 1と2がパッチに戻る

mqの更新を履歴管理する

qfoldとかするとパッチ領域(mq管理領域)自体を

  • hg init –mq で履歴管理開始
  • hg commit –mq でmq領域のcommit
  • hg push –mq でmq領域をpush
  • hg pull –mq でmq領域をpull
  • hg log –mq でmq領域のlogを見れる
  • hg qqueue で複数のmqも持てる

mqの履歴部分を消す場合は、 .hg/patches 自体を消す。やばいもうだめだと思ったら消してしまえばいい。

push/pullでmq領域自体をpush/pullできる。.hg/patches/.hg/hgrcを作って、mq領域の設定ができる。

mq領域は通常のレポジトリと完全に別なものとして意識することが重要。

作業領域の概念

commitしていない状態とは、「次にcommitするであろう候補」であると考えると分かりやすい。これを作業領域と呼ぶ。