26

TFSレンジャーチームが提供するベストプラクティスに従ってTFSを構成する方法を理解するのに問題があります。問題はそのようなものです:

私の会社には、共有の共通コードベースを利用する製品がいくつかあります。

> $/Core
>  -> /Main/Source (Parent Branch)
> 
> $/Product1
>  -> /Main/Source
>  -> /Main/Source/Core/Source (Child Branch from $/Core)
>  -> /Main/Source/...
> 
> $/Product2
>  -> /Main/Source
>  -> /Main/Source/Core/Source (Child Branch from $/Core)
>  -> /Main/Source/...

したがって、1つのチームコレクションがあり、この例では3つのチームプロジェクトがあります。($ / *はチームプロジェクトです)

最初のリリースの分岐は少し面倒です。/Mainから/Releases、または/Mainから/Developmentに分岐する代わりに、各プロジェクトを個別に分岐しています。(チームプロジェクトではなく...ソリューションプロジェクト。)

これは、ネストされたブランチルートを持つことができないためです。(TFSエラー:TF203028およびTF203071を参照してください)

TFS Ranger Guideと、リリース、ホットフィックス、開発を分岐するための改訂されたアプローチによると、/ Main / Source / Proj1、/ Proj2、/Proj3などではなく/Mainから分岐する必要があります。

理想的には、次のことを行います。

> $/Product1
> -> /Main/ (Branch - Parent)
> -> /Releases
>    -> /1.x
>       /1 Service Pack (Child Branch from $/Product1/Main
>       -> /1.0
>          -> /1.0 Hotfix (Child Branch from $/Product1/Releases/1.x/1 Service Pack)
>          -> /1.0 RTM (Child Branch from $/Product1/Releases/1.x/1.0/1.0 Hotfix - Read Only)
>          -> /1.0.22 RTM (Child Branch from $/Product1/Releases/1.x/1.0/1.0 Hotfix - Read Only)
>       -> /1.5
>          -> /1.5 Hotfix (Child Branch from $/Product1/Releases/1.x/1 Service Pack)
>          -> /1.5 RTM (Child Branch from $/Product1/Releases/1.x/1.5/1.5 Hotfix - Read Only)

解決策:1。各共有ブランチ(つまり、$ / Core)を通常のフォルダーに戻すことができます。このように、/Mainの下のフォルダはブランチルートではありません。次に、$ / Product1 / Main / Source / Core/Sourceから親の$/Core/Sourceへのベースレスマージを実行できます。

根拠のないマージの経験はありますか。私がマイクロソフトから読んだことは、それらはありふれたものであってはならない例外であるということです。MSは、TFSを使用してプロジェクトを適切にセットアップすれば、ベースレスマージを実行する必要がなくなると述べています。

チームプロジェクト間で分岐する場合、これはどのように可能ですか?!?ソフトウェア開発会社では、製品間でライブラリを共有するのが一般的です。

私は他の解決策にもオープンです。

ありがとう!

4

5 に答える 5

15

オプションをリングに入れます。役に立った場合と役に立たない場合があります。それが慰めであるならば、私はこれについてしばらく考えていました、そして完全に満足のいく解決策を思い付くことができませんでした。これは本当に良い質問であり、他の人がこの問題をどのように解決したかを知りたいと思います。

可能な限りソースからビルドすることをお勧めしますが、チームプロジェクト間の分岐は好きではありません。いくつかの一般的なコードがあり、他の2つまたは3つのチームプロジェクト間で分岐する必要がある場合、分岐は管理可能ですが、20または30(または100)のチームプロジェクトがある場合、マージの管理は頭痛の種になります。消費側のチームプロジェクトで作業している開発者が、履歴を表示できないなど、「マスター」で同じ権限を持っていない場合、他の問題が発生する可能性があります。もちろん、チームプロジェクト間で共有する必要のあるコードがある場合別のプロジェクトコレクションでは、とにかく分岐することはできません。

したがって、そのことを念頭に置いて、サードパーティのライブラリを処理してバイナリ参照を使用するのと同じ方法で共通コードを処理することをお勧めします。その考え方に入ると、いくつかのオプションが利用可能になります。(ここにいくつかありますが、おそらくもっとあります)

  1. 共通コードのビルドで、パッケージ化用のマージモジュール(MSIを使用している場合)とともに、バイナリをドロップ場所にコピーすることができます。次に、ドロップ位置へのバイナリ参照を作成し、マージモジュールをインポートするためのパッケージ化に使用するものをすべて取得します。このシナリオでは、ドロップの場所が安定していることを確認する必要があります(改ざんを防ぐために、ほとんどの開発者にのみ読み取ることが望ましい)
  2. オプション1と同様ですが、NuGetなどのツールを使用して参照を管理します。これにより、バイナリの新しいバージョンを参照するプロセスが自動化されます。
  3. ブランチ内の$/Product1 / branch / lib / commonフォルダーにバイナリをチェックインし、相対パスを使用してそれらを参照することができます。

私が言ったように、私は他のSOerがTFSを使用して共有コードの問題をどのように解決したかを聞くことに非常に興味があります。

編集:これについて8年間考えた後、Nugetパッケージはここで前進する方法です。それでも意見や賛成票が得られるので、残りの回答はそのままにしておきます。パッケージに依存関係を構築し、それらをバイナリリポジトリ(nuget / Nexus / Artifactory / Azure Artifactsなど)に格納することは、この問題を解決するためのほぼ標準的な方法です。

于 2011-04-22T00:39:57.050 に答える
6

TFS 2010ブランチの再検討:

この問題を解決する方法として、TFS2010のベースレスマージ機能に自信を持って提供したいと思います。Wroxの本「ProfessionalTeamFoundationServer2010」を手に入れることを強くお勧めします。

その中で、この問題を詳細に説明し、根拠のないマージの使用を推奨していませんが、このようなシナリオでそれらを使用する方法に光を当てています。

この質問が4月に最初に解決されて以来、私たちはそれらを使用してきましたが、根拠のないマージが問題を引き起こす状況にはまだ遭遇していません。本とALMレンジャーチームが推奨する分岐設定の詳細を示す画像を投稿したいと思いました。

ここに画像の説明を入力してください

于 2011-06-22T18:45:18.667 に答える
2

目的を達成するには、最初にルートの下のすべてのブランチをフォルダーに変換する必要があります。次に、ルートをフォルダーに変換できるようになります。

私たちは別のブランチの下でのマージで立ち往生していたので、根拠のないマージに行きました。それがどのように機能するかを理解するのに少し時間がかかりましたが、その後、ブランチ間でマージを実行し、それらの間の関係を作成することに成功しました。

tf merge /baseless "D:\TFS2010\Root\ServicePack" "D:\TFS2010\Root\MainLine" /recursive

ベースレスマージを実行したら、すべてのファイルをチェックインする必要があります。それでも、ブランチ間の関係は作成されていないことがわかります。

このためには、ServicePackブランチをクリックし(私の例のように)、ファイルメニューから[ソース管理]->[ブランチとマージ]->[親を変更]をクリックします。そこで、親を変更するオプションがあります。完了すると、これらのブランチ間でマージする場合はいつでも、ブランチ間で通常のマージのように実行できるようになります。 ここに画像の説明を入力してください

于 2011-04-22T11:16:39.043 に答える
1

私はちょうど今TFSを構成していて、同じ問題に遭遇しました。重要なのは、根拠のないマージは必要ないということです。回避策:

  1. 親ブランチを作成する

    $/コア/メイン

  2. 子ブランチを作成する

    $ / Product1- > / Main-> /
    Main / Core- > / Main / .. ..

  3. 子ブランチフォルダを削除します

    $ / Product1 / Main / Core

  4. 同じ名前 のフォルダを作成します

    $ / Product1 / Main / Core

  5. Product1フォルダーをブランチに変換します

    $ / Product1 / Main

これで、変更を$ / Core/Mainから$/Product1 / Main/Coreにマージできます。
コアブランチでは視覚化は機能しませんが、大丈夫だと思います;)

于 2011-12-26T13:57:51.527 に答える
0

共通のコードを共有したい場合は、次の解決策を試すことができます。

[ファイル]->[ソース管理]->[ソース管理からプロジェクトを追加...]に移動します。

これにより、ソース管理の他の場所からプロジェクトを追加できるダイアログがポップアップ表示されます。

このようなプロジェクトの共有に取り掛かったら、ソース管理構造を少し堅牢にする価値があります。

私が気付いたのは、共通コードに変更を加えても、自動的にチェックアウトされないということです。つまり、プロジェクトの違いを参照するのと似ていますが、TFSでも機能するということです。

の回答

于 2019-03-20T12:38:45.347 に答える