48

新年に向けて Team Foundation Server のロールアウトに向けて、ソース管理構造の標準化に取り組んでいます。CodePlex で入手できるMicrosoft Team Foundation Server Branching Guidanceドキュメントを使用することから始めました。

提案された構造について私が持っているいくつかの特定の質問に対するフィードバックと回答を得たいと思っていました. TFS でのソース管理の構造化に関して言えば、選択できる "標準" が非常に多いため、実際には標準が存在しないことを学びました。

最初に、決定事項と使用法について概説し、説明します。

$/                                                
    {Team Project}/                               
        {Subproject}/                             
            Development/                          
                Trunk/                            
                    Source/
                    Tests/
                    Sandcastle/
                    TeamBuildTypes/
                        {Build Name}/
                Branches/
                    {Branch Name}/
                        Source/
                        Tests/
                        Sandcastle/
                        TeamBuildTypes/
                            {Build Name}/

            Integration/
                Source/
                Tests/
                Sandcastle/
                TeamBuildTypes/
                    {Build Name}/
            Production/
                Releases/
                    {Release Version}/
                        Source/
                        Tests/
                        Sandcastle/
                        TeamBuildTypes/
                            {Build Name}/
                Branches/
                    {Branch Name}/
                        Source/
                        Tests/
                        Sandcastle/
                        TeamBuildTypes/
                           {Build Name}/

一般的な論理として、チーム プロジェクトには、単一の論理プロジェクト (エントリがない場合{Subproject}) または複数の関連プロジェクトを製品またはツール スイートの形式で含めることができます。3 つの主要なコンテナはDevelopment、 、Integration、および と呼ばれProductionます。

コンテナーのトランク内にDevelopmentは、フォルダー内の製品を構成する両方のプロジェクトのプロビジョニングがあり、Source対応する単体テストがTestsフォルダー内で利用可能です。マイナーな開発の大部分はトランクで発生し、分岐コンテナーとして機能するTrunkフォルダーの兄弟フォルダーを介して分岐が利用可能になります。Branches1 つ以上のソリューション ファイルが 内に存在しTrunk、そのレベルのブランチがソリューション、ソース、および単体テストを取得できるようにします。

TFS 以外のIntegration実装では「メイン」と呼ばれることが多いコンテナーは、変更セットを統合Developmentして安定したテスト可能なビルドを作成するためにのみ使用されます。Developmentテスト可能な製品が得られると、コンテナからのブランチとして最初に作成されます。このコンテナーからのビルドは、テスト環境と負荷テスト環境に使用されます。パフォーマンスの変化を監視できるように、テスト可能なビルドで負荷テストを含めることを選択し、不規則性の原因となった可能性のある変更セットを迅速に分離できます。

Productionプリプロダクションおよびプロダクション品質のビルドを作成するために使用されます。安定したビルドのリリースが推奨されると、最初はIntegrationコンテナーからのブランチとして作成されます。フォルダー内ではReleases、「リリースごとのブランチ」構造に従っており、スナップショットと分離を 1 か所で提供します。(たとえば、Release 1.1が本番前のビルドの準備ができている場合、安定したIntegrationコンテナーは構造内の新しいRelease 1.1フォルダーに分岐されますProduction/Releases。後続の RC および RTW/RTM もこのフォルダーに昇格されます。) 分岐構造も存在します。Branchesコンテナに見られるように。これにより、「ホットフィックス」、通常はリビジョン マーカー (Major.Minor.Revision) が可能になります。ブランチは現在のリリースから作成され、新しいリビジョン マーカーにマージされます。Release 1.1.1. Changeset は、受け入れ時にDevelopmentコンテナーに逆統合されます。Trunk

この構造は、堅牢性と複雑さのバランスが取れていると感じています。しかし、私がモデルに論理的に当てはめることのできないいくつかのしつこい質問があります。彼らです:

チーム ビルド-DevelopmentおよびIntegrationコンテナーは、最初はナイトリー ビルドとして開始され、最終的に継続的インテグレーション (CI) に移行します。Production コンテナーは手動でビルドされます。

  • ビルド定義はどこに置くべきですか? 編集 - いくつかの回答に基づいて、TeamBuildTypes フォルダーがトランクに移動され、適切なコンテナーに分岐されました。ただし、これは新しい質問につながります(次のとおり)。

  • TeamBuildTypes フォルダーを適切なコンテナーに配置するということは、すべてのビルド定義が適切なフォルダー間で再現されるということですか? たとえば、開発品質のビルドやテスト可能なビルドなどのビルド定義をすべて、構造全体のすべての TeamBuildType フォルダーに配置します。

ドキュメントの生成- Sandcastle を使用してドキュメントを生成します。具体的には、Sandcastle Help File Builderを使用して出力を管理しています。これにより、SFHB 固有の形式でプロジェクト ファイルが生成されます。

  • 生成されたドキュメントをソース管理構造に保存する必要がありますか?

  • ドキュメントはコンテナーごとに生成する必要がありますか?それとも、運用前および運用品質のビルドにのみ価値がありますか?

  • 高速なローカル ビルド時間を維持するには、ドキュメントの作成をビルド定義で所有する必要がありますか?

  • SHFB 固有のファイルはどこに置くべきですか? Source私の最初の考えは、それをおよびTestsフォルダーのピアとして配置することです。 Sourceとのピアであるという推奨事項に同意しTestsます。この変更を反映するために図を変更しました。

サードパーティのバイナリ

  • バイナリ (コントロール、ライブラリなど) をソース管理に保存する必要がありますか?

  • もしそうなら、それはそれ自身のチームプロジェクトであるべきですか?

一般的なドキュメント- 要件、設計ドキュメント、テスト計画など、生成されていないドキュメントは、ソース管理構造のフォルダーに反映されません。開発者や同僚とのいくつかの調査と議論の後、チーム エクスプローラーの組み込みのドキュメント フォルダーを使用すると、チーム プロジェクト ポータル内の構造が反映され、一部の (ビジネス) ユーザーは、ドキュメントを学習するための追加の複雑さを必要としないため、より多くの利点が得られます。 TFS のソース管理の側面。


より明確な図を提供するために、質問への回答が得られたら、構造を更新します。また、潜在的な変更に関連するその他のコメントも歓迎します。他に質問がある場合は、この投稿を必ず変更します。

編集:

  • 説明。 フォルダーもコンテナーの下に存在しますSourceTestsIntegration

  • Micah と Josh の両方が、サードパーティのバイナリに関する素晴らしい点を挙げました。問題に関する質問が追加されました。

  • ドキュメントの生成は遅くなる可能性があります。ドキュメントの作成を特定のチーム ビルド タイプが所有する必要があるかどうかに関する質問が追加されました。

  • 要件、設計ドキュメント、テスト計画など、生成されていないドキュメントに関連する解決策を追加しました。

  • ビルド定義の TeamBuildTypes フォルダーに関連する解決策を追加しました。

  • さまざまなフィードバックに基づいて、TeamBuildTypes フォルダーをトランク/ブランチ レベルに移動しました。

4

5 に答える 5

6

サンドキャッスル ファイルをソースとテストのピアとして配置するというアイデアが気に入っています。ドキュメント フォルダを追加すると、サンドキャッスル ファイルと、オプションで実際のドキュメントが含まれます。

意見には明確な違いがあり、私はこれについて反対票を投じられると確信しています(私は以前に行ったことがあるので)。いくつかの理由から、生成されたドキュメントを TFS に配置します。

  1. リリースごとにドキュメンテーションが必要になりますが、TFS を使用することは、ドキュメンテーションが正しい場所に留まるようにするための簡単な方法です。
  2. TFS を使用して保存するということは、誰もがドキュメントを入手する場所を知っているということです。

私がいつも苦労しているとは思わないことの1つは、サードパーティの依存関係の場所です。それらはソースの下に属しているため、各プロジェクトに含まれている可能性がありますが、プロジェクト間でそれらを共有したい場合は、新しいトップを追加できますレベルノード。

編集

私のバイナリの場合、通常は最終的に

$/ThirdParty/Company/Product/Version/Src(オプション)

たとえば、私は

$/ThirdParty/ Microsoft/ EntLib/ 3.1 4.0 ComponentArt/ WebUI/ 2008.1/ Src

私はソースを追加するのが好きです。CA のソースにパッチを適用する必要がありましたが、これはやりたくないのですが、サード パーティがバグを修正しない場合は、これに頼らなければなりません。

于 2008-12-19T14:28:02.707 に答える
3

バイナリの場合-明らかに、バージョン管理下にある必要があるバイナリは、自動ビルドの一部として「ビルド」していない「サードパーティ」のアセンブリだけです。ソースがバージョン管理下にある独自のライブラリがある場合など、ビルドと同期などのさまざまな戦略を検討する必要があります。

次に、それらをJoshのように整理し、分岐を使用して、ソリューションツリー内の.NETプロジェクトフォルダーのピアである_ExternalReferencesフォルダーにバイナリを「コピー」します。これは、TFSバージョン管理が「デルタ」のみを格納するため、サーバー側で非常に効率的な方法です。したがって、多くのプロジェクトにわたるこれらのバイナリの基本的にすべての「複製」は、基本的に「ポインター」のようなものです。

于 2008-12-28T17:24:30.690 に答える
3

TeamBuilds フォルダーをトランクの下に置く必要があります。これは TFS2005 では不可能でしたが、Microsoft は 2008 年に修正しました...

この理由は、ビルドが新しいバージョンで変更される可能性があり (たとえば、新しいパッケージ スキーム、異なるテストなど)、古いメンテナンス リリースと互換性がなくなる可能性があるためです。そのため、チーム ビルドをコードのバージョンと結合する必要があります。

このようにして、1.0 バージョンをリリースし、それを Releases フォルダーの下に置くとしましょう。開発トランクで v2.0 の作業中にビルドしてパッチを発行することができます (ビルドの変更が必要になる場合があります)。

于 2008-12-27T08:39:55.103 に答える
2

私がお勧めすることの 1 つは、チーム ビルドに既定の場所を使用せず、「分岐可能」レベルに含めることです。これは、さまざまな理由 (コード プロモーションなど) で分岐するときに、ビルド スクリプトを分岐して同期する必要があるためです。それ。

また、よりシナリオに特化した新しいガイドがhttp://www.codeplex.com/TFSBranchingGuideIIで公開されました。

于 2008-12-24T10:31:49.340 に答える