私はすぐに複数の異なるバージョン(Trial、Professional、Enterpriseなど)に分岐するプロジェクトに取り組んでいます。1つのコードベースから複数の製品を開発するための戦略
私はSubversionを最初にリリースして以来(そしてそれ以前のCVS)Subversionを使用していましたので、ブランチとタグの抽象概念には満足しています。しかし、すべての私の開発経験では、私は実際にトランクコードに取り組んできました。いくつかの稀なケースでは、リポジトリを所有していた他の開発者が、特定のブランチに変更を加えるようにと頼んだので、私は彼に何を求めてもやっただけです。私は奇妙な黒い芸術を "合併する"と考えており、慎重な監督の下でそれを試みたことはない。
しかし、この場合、私はリポジトリを担当しています。この種のことはまったく新しいものです。
コードの大部分はすべての製品間で共有されるため、コードは常にトランクに存在すると想定しています。私は、各製品のリリースビルド用のタグで、各バージョンのブランチがあると仮定します。
しかし、それ以外のことはあまりよく分かりません。私は、それを台無しにするための千と一つの方法があると確信しています。可能であれば、私はそれを台無しにしないようにしたいと思います。
たとえば、私はプロとエンタープライズのバージョンで新しい機能を開発したいと考えていますが、その機能をデモ版から除外したいとします。どうすればそれを達成できますか?
私の日常的な開発では、私が働いているときに開発スナップショットをブランチからブランチに(またはトランクに)切り替える必要があるとも仮定します。混乱を最小限に抑える方法で、これを行う最善の方法は何ですか?
その他の戦略、ガイドライン、ヒントはお勧めしますか?
UPDATE:
まあ、すべての権利、その後。
分岐のように見えるのは正しい戦略ではありません。だから私は "分岐"の焦点を削除する質問のタイトルを変更し、私は質問を広げている。私は私の他のオプションのいくつかを想定
は以下のとおりです。私は常にすべての機能を、ソフトウェアのフルバージョンを配布し、選択的ライセンスで承認に基づいて機能を有効または無効にするには、ライセンスを使用することができ
1) 。私がこのルートをとった場合、ある種のシングルトン「ライセンスマネージャ」オブジェクトを呼び出すif/elseブロックのラストネストを想像することができます。このような場合にコードスパゲッティを避ける最良の方法は何ですか?
2)私は依存性注入を使うことができました。しかし、一般的に、私はそれを嫌いです(ロジックをソースコードから構成ファイルに移してしまうため、プロジェクトが難しくなります)。それでも、私はまだ完全なアプリを配布し、実行時に機能を選択しています。可能であれば、エンタープライズ版のバイナリをデモユーザーに配布しないでください。
3)私のプラットフォームで条件付きコンパイルがサポートされている場合、#IFDEFブロックとビルドフラグを使用して機能を選択的に含めることができます。それは、GUI全体のパネルのような大きな、ちょっとした機能にはうまくいくはずです。しかし、例えばロギングや統計的なトラッキングのような、より小さくて横断的なコンサートはどうですか?
4)私はANTを使ってビルドしています。ANTのビルド時間依存性注入のようなものがありますか?
それが途中で失敗する可能性がありますので、私は部分的に作業コピーを切り替えて、あなたを残して(バージョン管理外のファイルがバージョンのものを妨害しているなどの場合)「スイッチ」を使用してお勧めしません。各ブランチに対して1つのチェックアウトを行うと、混乱が少なくなります。 –