最大の違いは、ブランチ名が履歴に記録される方法です。名前付きブランチでは、ブランチ名が各チェンジセットに埋め込まれているため、履歴の不変の部分になります。クローンの場合、特定のチェンジセットがどこから来たのかについての永続的な記録はありません。
つまり、クローンはブランチ名を記録したくない簡単な実験に最適であり、名前付きブランチは長期的なブランチ( "1.x"、 "2.x"など)に適しています。
また、単一のリポジトリで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]
この話の私の主なポイントはこれです:単一のクローンは開発のいくつかのトラックを簡単に表すことができます。これは、拡張機能を使用しない「plainhg」にも常に当てはまります。ただし、ブックマーク拡張機能は非常に役立ちます。チェンジセットに名前(ブックマーク)を割り当てることができます。上記の場合、開発ヘッドとアップストリームヘッドにブックマークが必要になります。ブックマークはMercurial1.6でプッシュおよびプルでき、Mercurial1.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つのクローンを使用して何年も開発されました。'default'ブランチに加えて'stable'というブランチを維持し、'stable'ブランチに基づいてリリースを作成します。推奨されるワークフローの説明については、wikiの標準の分岐ページを参照してください。