今回は "8 Managing releases and branchy development" を読みます。
ブランチの話の筈が、まずは「タグ」に関する説明です。
Mercurial での「タグの付与」は、 チェンジセット1つ分を使用して履歴として記録されます (「タグの付与」時点で自動的に commit されるそうです)。
Mercurial では、タグの一覧が .hgtags ファイルに格納されますが、
タグの解析時には最新のリビジョンの情報を参照するのだそうです。
おそらく性能上の理由なのでしょうが、
.hgtags は永続化に使用して、
各リビジョンの履歴情報をキャッシュ代わりにしているのでしょう。
そのため、
何らかの理由(例えばマージの際の衝突等)で .hgtags
を修正する必要に迫られた場合は、
あらかじめ hg tags
コマンドで修正内容の妥当性を確認して欲しい、とのことです。
この節の内容は、図が無いとわかりづらいかもしれません。
前述のように、「タグの付与」はチェンジセットを1つ消費します。

hg clone の際に
"-r X" オプションでタグ名を指定した場合、
タグ X が指すチェンジセット 1 までが複製対象となりますから、
指定したタグ名に関する「タグの付与」チェンジセットが含まれません。

結果として、
タグ名を指定した hg clone で得られるリポジトリには、
複製に用いたタグ名の情報は含まれないことになります。
私自身は面倒くさがりなので、 転送量に顕著な差がなければきっと全 pull してから update しますから、 そうそうはまりそうな落とし穴ではないと思いますが、 確かにはまった時にぎょっとしそうな気はします。
他のリポジトリからは見えない(= 伝播しない) ローカルなタグが付けられる、というのは便利ですね。
「巨視的なブランチ」と「微視的なブランチ」という概念を導入することで、 同じように「ブランチ」と呼ばれるものにも実は違いが有るのだ、 ということを説明するのがここでの主題です。
CVS や Subversion における、
比較的寿命が長いブランチに相当するものを「巨視的なブランチ」、
Mercurial において他の開発者の成果を hg pull した際に、
一時的に手元のリポジトリのヘッドが複数になる状況に相当するものを
「微視的なブランチ」と定義しています。
CVS や Subversion でのブランチ (=「巨視的なブランチ」)はリポジトリ内に作成されますが、 Mercurial のような分散リポジトリ形式の SCM ツールの場合、 「いっそ巨視的なブランチごとに(開発者の成果を集約する) リポジトリを分けてしまった方が簡単」だそうです。
確かに、主開発とブランチの間で、 お互いの成果が混在したりする危険が無くなるわけですから、 なかなか魅力的な提案ではあります。
「でも同じ修正を繰り返すのは嫌なので、 必要に応じてブランチでの変更を主開発側にマージしてね」だそうです。 確かに。
開発メンバーが more in the "power user" category ならば、同一リポジトリに複数のブランチが混在していても大丈夫、 とのことですが、 そもそも "power user" という括りはどの程度のレベルを指しているのでしょうか?
"hg branch ブランチ名" で指定したブランチ名が、
次回の commit 操作時にチェンジセットに記録され、
ブランチ名の付いたチェンジセットから派生するチェンジセットは、
同じブランチ名を継承するのだそうです。
hg commit
にブランチ名指定のオプションがあった方が良い気がするのですが、
どうなんでしょうか?
履歴をツリー化した場合に、
枝から枝へ移動するような場合には、
hg update に
-C オプションを付けなければなりませんよ、
というお話。
Mercurial では、
hg merge コマンド実行時に、
実行時の作業領域ディレクトリの親リビジョンを第1親、
コマンドに(暗黙の tip 指定も含めて)指定されるリビジョンを第2親とみなし、
タグ名を引き継ぐのは第1親からのみなのだそうです。
cvs update -j rev と理屈は一緒ですね。
ブランチは便利だね、というお話。
以上で "8 Managing releases and branchy development" 節は終了です。
分散型リポジトリの場合、 ちょっとやそっとの間違いをしても、 共有用のリポジトリへの反映さえ行わなければ、 集中型リポジトリよりも圧倒的にやり直しが簡単なのですが、 間違えた際の手法をより深く理解をすることで、 心理的な抵抗を更に下げることができるのではないでしょうか。 ということで、次回は "9 Finding and fixing your mistakes" を読んでみようと思います。
"Distributed revision control with Mercurial" 関連エントリの一覧は、BOSBook(Bryan O’Sullivan Book)タグで参照できます。