最大の違いは、ブランチ名が履歴に記録される方法です。名前付きブランチでは、ブランチ名が各チェンジセットに埋め込まれているため、履歴の不変部分になります。クローンでは、特定のチェンジセットがどこから来たのかについての永続的な記録はありません。
つまり、クローンはブランチ名を記録したくないクイック実験に最適であり、名前付きブランチは長期ブランチ(「1.x」、「2.x」など)に適しています。
また、1つのリポジトリーでMercurialの複数の軽量ブランチを簡単に収容できることにも注意してください。このようなリポジトリ内ブランチをブックマークして、簡単に見つけられるようにすることができます。次のような会社のリポジトリを複製したとします。
[a] --- [b]
あなたはハックして作り[x]、そして[y]:
[a] --- [b] --- [x] --- [y]
誰かプットしながら、平均[c]して[d]、あなたが引くときに、あなたがこのような歴史のグラフを取得し、リポジトリに:
[x] --- [y]
/
[あいうえお]
ここでは、1つのリポジトリに2つのヘッドがあります。作業コピーは常に単一のチェンジセット、いわゆる作業コピーの親チェンジセットを反映します。これを確認してください:
% hg parents
それが報告するとしましょう[y]。あなたは頭を見ることができます
% hg heads
そして、これは報告[y]し[d]ます。リポジトリをのクリーンチェックアウトに更新する場合は[d]、次のようにします([d]のリビジョン番号に置き換えます[d])。
% hg update --clean [d]
その後、そのhg parentsレポートが表示され[d]ます。あなたの次のコミットというこの手段があります[d]親として。したがって、メインブランチで気付いたバグを修正し、チェンジセットを作成できます[e]。
[x] --- [y]
/
[a] --- [b] --- [c] --- [d] --- [e]
チェンジセット[e]のみをプッシュするには、以下を実行する必要があります
% hg push -r [e]
[e]チェンジセットハッシュはどこですか。デフォルトではhg push、単純にリポジトリを比較し、それを見るだろう[x]、[y]と、[e]不足しているが、あなたが共有したくない場合があります[x]し、[y]まだ。
バグ修正があなたにも影響を与える場合、あなたはそれをあなたの機能ブランチとマージしたいでしょう:
% hg update [y]
% hg merge
これにより、リポジトリグラフは次のようになります。
[x] --- [y] ----------- [z]
/ /
[a] --- [b] --- [c] --- [d] --- [e]
どこ[z]の間にマージされ[y]とは[e]。ブランチを破棄することもできます。
% hg strip [x]
このストーリーの主なポイントは次のとおりです。1つのクローンで複数の開発トラックを簡単に表現できます。これは、拡張機能を使用しない「プレーンhg」にも常に当てはまります。ブックマークの拡張子はいえ、大きな助けです。チェンジセットに名前(ブックマーク)を割り当てることができます。上記の場合、開発ヘッドとアップストリームヘッドにブックマークが必要です。ブックマークはMercurial 1.6 でプッシュおよびプルでき、Mercurial 1.8の組み込み機能になっています。
2つのクローンを作成することを選択した場合、作成後の開発クローンは次のように[x]なり[y]ます。
[a] --- [b] --- [x] --- [y]
そして、上流のクローンには以下が含まれます:
[a] --- [b] --- [c] --- [d]
これでバグに気づき、修正しました。ここでhg updateは、上流のクローンを使用する準備ができているので、必要はありません。あなたはコミットして作成します[e]:
[a] --- [b] --- [c] --- [d] --- [e]
バグ修正を開発クローンに含めるには、そこにプルします。
[a] --- [b] --- [x] --- [y]
\
[c] --- [d] --- [e]
そしてマージ:
[a] --- [b] --- [x] --- [y] --- [z]
\ /
[c] --- [d] --- [e]
グラフは異なって見える場合がありますが、構造は同じであり、最終結果は同じです。クローンを使用すると、精神的な簿記を少し少なくする必要がありました。
名前付きブランチは非常にオプションであるため、ここでは実際には表示されません。Mercurial自体は、名前付きブランチの使用に切り替える前の数年間、2つのクローンを使用して開発されました。「デフォルト」ブランチに加えて「安定」というブランチを維持し、「安定」ブランチに基づいてリリースを作成します。参照標準の分岐推奨ワークフローの説明については、ウィキでページを。