Python Developers Festa 2012.03
Mercurial ハンズオンのスタッフ要員として、Python Developers Festa 2012.03 に参加してきた。
主催の id:Voluntas 氏を初めとする運営スタッフの皆様、および参加者の皆様、お疲れ様でした。
それから、私の到着、ギリギリ時間過ぎでしたね。受付のお手数をお掛けして御免なさい .... orz > Voluntas 氏
今回のハンズオンは、id:troter 氏の資料を元に、各自が黙々と作業しつつ、適宜 troter 氏や私が質問等に答える、というスタイルで実施。
とりあえず、覚えている範囲で、『入門 Mercurial』や僕のホームページでは明記してない(or 記述が少ない)話題に関しての詳細とか、思い付いたこととかをまとめておく。troter 氏のまとめも併せてご覧ください。
『作業領域』はリビジョンの一種
『作業領域』と『親リビジョン』の関係は、人によっては、慣れるまで結構こんがらかり易い、という印象がある。
基本的には、以下のようなマインドモデルがお勧め:
『作業領域』は、『次の commit によって作成されるリビジョン』(= commit 後の『親リビジョン』)の原型
これだと、『マージによって作業領域の親リビジョンが2つ』になる状況も、『次の commit によって作成されるリビジョン』(= マージ実施リビジョン)の親が2つになるための前段階、ということで理解できる。
『入門 Mercurial』の p39 でもこれに類する話がちらっと出ているけれど、確か元ネタは Definitive 本だったか、本家 Wiki 中のドキュメントだったような気が。
マージリビジョンでの差分表示
以下のような履歴ツリーにおいて、リビジョン B と D をマージしたリビジョン M に対して、"hg diff -c M" などとやっても、思ったような差分が表示されない事が多い。
この場合、マージされた片側の枝における変更内容を確認するには、diff での対象リビジョンを以下のように指定してやれば良い。
# C 〜 D 側の枝における変更内容 $ hg diff -r B -r M # A 〜 B 側の枝における変更内容 $ hg diff -r D -r M
M の第1親が B、第2親が D だとすると、revset 記述を使用すれば、上記はそれぞれ '-r M^1 -r M' と '-r M^2 -r M' になって、『第2親側の差分』の場合は 'M^1'、『第1親側の差分』の場合は 'M^2' と、互い違いのリビジョンを指定すれば良い事がわかる。
# Windows の DOS 窓では、M^1 や M^2 はダブルクォートで囲う必要アリ