リポジトリに詳細な履歴を保持したいが、「合理的な」リビジョンセットのみを含む理想的な履歴を作成したい(そしてエクスポートできるようにしたい)のですよね?お見舞い申し上げます。
解決策1:タグを使用して履歴内の興味深いポイントをマークし、それらの間のすべての厄介なビットを無視することを学びます。
解決策2: 2つのブランチを使用してマージします。ブランチで開発をdefault
行い、並列ブランチを維持しますrelease
。(あなたはそれを呼ぶことができますclean
が、実際にはあなたはリリースを管理しています)。チェックポイントを設定する安定した状態にあるときはいつでも、ブランチにdefault
切り替えて、必要に応じて、現在の-の状態をバッチでマージします。に直接コミットしない場合は、マージの競合は発生しません。release
default
release
(original branch) --o--o--o--o--o--o--o (default)
\ \ \
r ... ... --r--------r (release)
結果:の任意のリビジョンに更新してrelease
、機能状態を期待できます。実行するhg log -r release
と、選択したチェックポイントのみが表示されます。ログ全体を調べて、すべてがどのように発生したかを確認できます。欠点:release
ブランチはに依存しているため、ブランチdefault
を持ってこない限り、別のリポジトリにプッシュすることはできませんdefault
。またhg glog -r release
、マージが繰り返されるため、奇妙に見えます。
解決策3:上記のように名前付きブランチを使用しますがrebase
、マージする代わりに拡張機能を使用します。リベースされたチェンジセットを完全に移動するのではなく、コピーするオプションがあります。--collapse
また、一連のリビジョンを1つのリビジョンに変換するオプションがあります。r1:tip
ファイナライズする一連のリビジョンがある場合は、次のようにからにコピーします。default
release
hg rebase --source r1 --dest release --keep --collapse
これにより、その先頭にある1つのリビジョンが、release
r1からの先頭へのチェンジセット全体に相当しdefault
ます。この--keep
オプションは、破壊的な書き換えではなく、コピーにします。利点は、release
ブランチが希望どおりに表示されることです。きれいできれいであり、デフォルトのブランチをドラッグせずにプッシュできます。欠点は、そのステージをのリビジョンに関連付けることができないことです。したがって、中間リビジョンdefault
を本当に非表示にする必要がない限り、方法2をお勧めします。(また、リベースは「ソース」リビジョンのすべての子孫を移動/コピーするため、複数のバッチで履歴を潰すのは簡単ではありません。)
これらはすべて、追加の作業を行う必要があります。Mercurialには、どのレブセットを押しつぶしたいかを知る方法がないため、これは避けられません。