2012-06-13 30 views
7

私は、ビジネスロジックとデータトランザクションのためのC#アセンブリである "Framework"というソリューションを持っています。TFS分岐推奨

私はフレームワーク、1つのウェブサイト、1つのコンソールアプリケーションと3つの他のタイプのアプリケーションを使用する4つのアプリケーションを持っています。

$/TeamProject 
    /Framework 
     /Dev 
     /Main 
     /Release 
    /WebApp 
     /Dev 
     /Main 
     /Release 
    /WCFApp 
     /Dev 
     /Main 
     /Release 

これらのすべてを1つのチームプロジェクトで、各アセンブリ/アプリケーションをそれぞれのフォルダの下に置いています。

フレームワークアセンブリを共有する各アプリケーションに分岐機能を使用したいが、フレームワークと共にアプリケーションを分岐する最良の方法は何か分からない。

提案がありますか?

私はブランチとマージの仕組みを知っていますが、すべての例では1つのフォルダに含まれるすべてのブランチを示しています。

+0

ソースコントロールの私のファイルは、現在、どのようにあなたが1つのブランチに各アセンブリをマージしている –

答えて

7

、私は次のような仮定を作ってあげます - 別名トランク - ブランチ)、トップレベルのすべてのフォルダをそのフォルダに移動します。

我々が持っているので、その後:

 
$/TeamProject 
    /Main 
    /Framework 
    /Console 
    /Web 
    /etc. 

は今、あなたはブランチにMainを変換する必要があり、あなたはMainフォルダを右クリックして、これを行うと「ブランチに変換」を選択することができます。 TFSでは$/TeamProject/Main$/TeamProject/ConsoleV2に分岐させ、コンソールのV2の機能を使用できるようになりました。このブランチで必要に応じて、コンソールアプリケーションとフレームワークを変更できます。この作業が完了したら、変更を逆統合(マージアップ)してMainに戻すことができます。

フォワードインテグレーションを実行し続けることを忘れないでください。Mainからフィーチャーブランチにマージ(マージダウン)し、コードベースを同期させるために競合を解決してください。

このアプローチをとることで、たとえば、フレームワーク上のAPIを変更してメソッドに新しい必須パラメータを追加するなど、1回のアトミックチェックで任意の製品の任意の部分を変更できます。すべてのあなたのアプリを同時に、そしてあなたがRIにマージするとMainにすべてが更新されます。

+0

私はこのapprachを知っています、これは私がBrachにConsole Appと一緒にフレームワークと一緒にブランチしたいのであれば問題です。少しオーバーしているようです –

+0

ソースリポジトリからブランチを作成しても、作成するブランチのサイズは変更されません。このアプローチを使用して、アプリケーションのいくつかの異なる部分を分岐させてバージョンに依存しないようにし、従属部分を同時に更新できるようにしました。作業していないフォルダは無視してかまいません。 – DaveShaw

+0

自分のチームプロジェクトでソースコードが現在どのように構造化されているかを「視覚的」に追加しました –

-2

&を個々のプロジェクトにマージする場合は、TFSの下でそれを実現する唯一の方法は、ソリューション内のプロジェクトごとに個別のTFSプロジェクトを作成することです。希望は意味をなさない。これを行うと、各プロジェクトのコードを作業ディレクトリに分岐することができます。

少し前にVSSからTFSにコードを移行しました。当時、私たちはすべてのコードを1つのTFSプロジェクトに入れるか、またはそれらを分割することにしました。そこで、私たちはウェブサイト、ビジネスライブラリ(ウェブサイト&他のアプリケーションによって使用される)、データレイヤーを持っています。ライブラリ、Webサイト、およびデータレイヤープロジェクト用に個別のTFSプロジェクトを作成しました。各プロジェクトにはトランクブランチがあります。最新のものを必要とする人はすべて、自分のコピーをトランクからブランチしてそこにマージします。

希望に役立ちます。

 
$/TeamProject 
    /Framework 
    /Console 
    /Web 
    /etc. 

何を最初に行う必要がありする(これは自分のメインになります$/TeamProjectMainというフォルダを作成している:あなたのソース管理ディレクトリを表す絵の光で

+0

を見てどのように示すの? –

+0

ここに事があります。すべての開発者は、ローカルのソリューションファイルを保持する必要があります。だから、私はウェブサイト、ライブラリ、およびデータアクセスライブラリが必要な場合、私はTFSから私の最後のソリューションにそれらのブランチを取得し、決してソリューションをチェックインしません。 – Skadoosh

+0

以下をご覧ください:http://stackoverflow.com/questions/400517/tfs-structure-multiple-projects-or-single-project and http://stackoverflow.com/questions/867628/merging-and-branching -shared-code-between-projects-in-tfs – Skadoosh

2

私が理解しているように、「フレームワークに依存するアプリケーションを分岐するには、どのような分岐構造が最適ですか?それらを一緒にビルドしてバージョン/リリースすれば、DaveShaw descibesとしてすべてを一緒に分岐する方が簡単で安価です。ただし、それぞれが異なるチームによって開発され、異なるリリーススケジュールを持つ場合、異なるバージョンを持つ場合など、それぞれの下にMAINブランチを作成するよりも、この場合、誰がフレームワークの変更を所有しているかが明確でなければなりません。通常、フレームワークのような共有プロジェクトに必要な人のみにチェックインアクセスを制御することをお勧めします。

後者の場合は、現在のグラフィックでうまく処理されていると思いますが、私は1つの変更を行います。リリースをMAINブランチと同じ階層に置いて、参照を作成するために相対パスが同じになるようにします。これは、ワークスペースのマッピングを簡素化します:

$/TeamProject 
    /Framework 
     /Dev 
     /Main 
     /Release1 
     /Release2 
     /Release3 
     ... 
    /WebApp 
     /Dev 
     /Main 
     /Release 
      /Release1 
      /Release2 
      /Release3 
      ... 
    /WCFApp 
    ...