私には2つの答えがあります:私たちがしていることと私があなたに提案することです。
私たちには、すべてが多くの共有コンポーネントを持つ一連のWebアプリがあります。そのため、これは約50の異なるアセンブリ(VSプロジェクト)と5〜10のソリューション(見方によって異なります)ですが、それらすべてに非常に大きな重複があります。つまり、開発ごとのTFSマージを使用する必要があります。それらの重複したリソースを分岐してマージするよりも。そのため、実際にはこれらすべてを1つのTFSプロジェクトに保持しています。これが私たちのセットアップ方法です(あなたにとって意味のある名前に変更されました):
"Official Projects" (Collection)
"Production Applications" (Project)
"Technology Proof of Concepts" (Project)
"Reference Projects" (Project) - this is a simple solution/projects using our architecture to make our architecture easier to understand as people join our team. Other reference apps will go here in the future.
"TFS Configuration" (Project)
"Playground" (Collection)
"John Doe" (Project)
"Jane Doe" (Project)
"Security Team" (Project)
"Production Test" (Project)
私たちのセットアップでは、公式の会社コードの場所があります。さらに、TFSに関連するさまざまなメリットを活用しながら、何も台無しにすることを恐れずに、人々が失敗する領域があります。
ただし、あなたのシナリオでは、行間を正しく読んでいる場合は、別のことを提案します。私の仮定:
- 各プロジェクトは、いくつかの共通のアセンブリ(ロギング、セキュリティ、および会社全体で共有されるその他のユーティリティアセンブリを考えています)を除いて、無関係のプロジェクトです。
- 共有/共通アセンブリは定期的に変更されないため、常に最新の最新バージョンのコードを使用しているプロジェクト参照ではなく、DLL参照を使用できます。
- (私もまだ学んでいるので、TFSベースの仮定)同じコレクションからプロジェクト間で分岐することはできますが、コレクション間で分岐することはできません。
- 上記の共有アセンブリを除いて、他のコードはチーム間で共有されません。
したがって、これらの仮定では、次のようなものを使用します。
"Common Resources" (Collection)
"Source" (Project) - everything goes here such as logging assemblies, security assemblies, etc.
"Version 1" (Project) - Branch as you "rev" your common assemblies so people have access to older versions.
"Version 2" (Project)
"Version 3" (Project"
etc.
"Team 1" (Collection)
"Project 1"
"Project 2"
"Project 3"
"Project 4"
"Project 5"
"Team 2" (Collection)
"Project 1"
"Project 2"
"Project 3"
"Team 3" (Collection)
"Project 1"
"Project 2"
etc.
このようにすると、DLL参照を介して共通のアセンブリを参照します。特定のプロジェクトのチームまたは開発者は、新しいバージョンの共通アセンブリの使用をいつ開始するかを決定できます。これを行うには、そのバージョンのブランチの最新情報を入手して、そのバージョンへの参照を追加するだけです。私の仮定#3が間違っている場合は、うまくいけば、それよりも優れたことができます。それ以外の場合、各プロジェクトには独自のスペースがあり(VSソリューション/プロジェクトを複数含めることができます。これは良い考えです)、チームには他のチームから離れた独自のコレクションがあります。
ちょうど私の0.02ドルの価値...