1

コードの大部分を共有するが、すべてではない一連の製品を作成しているとします (たとえば、複数のフロント エンドを持つアプリケーション: コマンド ライン、Windows/MAC/Linux GUI、モバイル (最小限の) GUI、Web GUI など)。 .)

さらに、共有コードを簡単に分割して「ライブラリ化」することはできません。

さまざまな製品に Mercurial という名前のブランチ (例: ブランチ: CLI、Windows、MAC、Linux、Mobile、Web) またはコード内のコンパイル フラグ (例#if (FRONT_END == CLI) #elif (FRONT_END == WEB) ...) を使用することを検討しています。

どちらのアプローチにも満足していません。ここに私の不満があります:

名前付きブランチ:

  • 共有コードの一部を変更した場合、それをすべてのブランチとマージする必要があります。これを(半)自動的に行う hg コマンドはありますか?
  • 特定の機能がすべてのブランチでどのように実装されているかを確認するのは簡単ではありません (コードの 1 つの領域の違いを視覚化します)。

コンパイル フラグ:

  • コードの混乱
  • 暗黙的なブランチのリビジョン履歴はありません。手動で行う必要があります (影響を受ける製品を示すメッセージをコミットします)

あなたは提案できますか:

  • 私の不安を和らげる方法は?
  • 別の視点
  • 2 つのアプローチを組み合わせるエレガントな方法

ありがとう

4

1 に答える 1

0

私はあなたのために最善の戦略を持っていると思います。

序文:私は激しく、猛烈にifdefされたスパゲッティコードを嫌います


名前付きブランチは悪くはありませんが、管理者には欠点がありました。何度か試みて失敗した後、私は「単一のコードベース+複数のMQパッチ」のアイデアにとどまりました。新鮮なMercurialを使用すると、複数のキューを持つことができ、保護されたパッチを使用できます...その結果、1つのバニラコード(多くの(任意の)ターゲット)があります

今後の読み物:「Mercurial:The Definitive Guide」、第12章MercurialQueuesによる変更の管理および第13章MercurialQueuesの高度な使用

于 2012-11-28T11:01:12.970 に答える