1

次のような TFS 構造があります。

$

-MainSoftwareBranch

-開発者

-主要

-企業

-プロジェクト1

-テスト

-チームプロジェクトA

-主要

-企業

-プロジェクト1

-チームプロジェクトB

-主要

-企業

-プロジェクト1

これの最終的な目標は、MainSoftwareBranch (MSB) に当社が開発するすべてのソフトウェアを含めることです。ソフトウェアの一部が必要な場合は、それをプロジェクト ブランチに分岐し、必要に応じてプロジェクト参照を追加します。

過去のある時点で、私たちの分岐戦略にあまり詳しくない誰かが Project1 を MSB からではなく、TeamProjectB から直接 TeamProjectA に分岐させました。私はこれを修正しようとし、TeamProjectA で参照されていた場所から $/TeamProjectB/Main/Enterprise/Project1 へのプロジェクト参照を削除しました。$/MSB/Main/Enterprise/Project1 から Project1 を分岐し、「既存のプロジェクトを追加...」を使用してプロジェクトをソリューションに追加し、csproj ファイルがあるローカル パスを参照しようとしました。ただし、読み込まれるプロジェクトは $/TeamProjectB のものです。TFS 内でも、csproj ファイルと sln ファイルでも手動でソース管理バインディングを削除しましたが、何も変わりません。正しいcsprojファイルを開くという私の要求を、無効な古いファイルに常に「リダイレクト」しています。

この奇妙な動作を引き起こしている可能性があるものについて、誰か洞察を持っていますか?

4

2 に答える 2

0

プロジェクト参照は TFS とは何の関係もありません。これらは、ローカル ディスクに相対的な参照です。

ここで、プロジェクトがローカル ディスクの TFS ワークスペースに配置されている場合は、ワークスペースに関連する参照があります。

個々の .csproj または .vbproj ファイル内を調べて、参照先を確認します。../../../../SomeProject.csproj のような相対参照があることがわかると思います。相対パスは、ワークスペースの外に出てから下に戻ります。

于 2011-06-01T05:18:21.960 に答える
0

確認すべき点がいくつかありますが、TFS/プロジェクト構造の変更を行う前に、現在のすべての変更を (すべてのチームに対して) チェックインし、get-latest を実行してこれらの変更をすべて取得し、バックアップを作成することをお勧めします。ローカル ワークスペース フォルダー全体。

あなたに完全に答えるために明確にする必要がある1つのポイント...どのサブフォルダーが分岐されていますか? IE は通常、 に分岐MSB/Mainしますか、それとも、などTeamProjectA/Mainの個々のプロジェクトに分岐しますか?MSB/Main/Enterprise/Project1Project2


最初: ワークスペースのマッピングを確認します... Visual Studio で、ソース管理エクスプローラーを開きます。ウィンドウの上部にワークスペースのドロップダウンがあります...「ワークスペースの管理...」を選択して、メインのワークスペースを編集します。

理想的には、TFS プロジェクトのルート (この場合は「$」) をルート ローカル作業フォルダーにマッピングする作業フォルダーが 1 つだけ存在します。複数の作業フォルダーがある場合は、2 番目のフォルダーがルートのサブフォルダーでないことを確認してください。IE 用に別のフォルダーを用意するべきではありません$/TeamProjectA/Main/Enterprise/Project1。もしそうなら、それを削除し、ルートから get-latest を実行してください。

TeamProjectB/Project1がフォルダーにマップされている場合TeamProjectA、参照を何回変更しても関係なく、常にチーム B のプロジェクトをロードしているため、これは私の最初の推測です。


2 番目: 分岐は 1 回だけ行います。その後のすべてがマージされ、直接の親と子の間でのみマージできます (フープをジャンプして手動でマージを台無しにしない限り... 9 カ国で射撃可能な犯罪です)。

つまり、Project1から分岐している限り、TeamProjectB常に に結び付けられTeamProjectBます...各チームおよびプロジェクトの TFS で参照を修正できますが、 にマージしTeamProjectAて戻すとMSB、 Project1 はMSBすべてとマージされません。そうしないと。

何が起こるかははっきりしていません...そのプロジェクトは何もマージされないか、TeamProjectBのフォルダーにマージされます。後者が当てはまるとは思えませんが、前者もあまり意味がありません... TFSが何らかの形で短絡することをほとんど期待しています。

私は(完全なWAG)から分岐できたので、分岐Project1TPBTPAいない/Mainか、または/Main/Enterprise...答えがTFS別の分岐のサブフォルダーへの分岐を許可しないことを願っています。


これを修正するには

  1. にマージProject1TPBます。チェックイン。

  2. にマージTPB/Project1MSBます。チェックイン。

  3. を選択しTPA/Project1ます。に進みFile -> Source Control -> Branching and Merging -> Reparentます。MSB's Project 1新しい親として選択します。ブランチが/Mainまたはから作成された場合/Main/Enterprise、ブランチ ルートが何であれ、親を変更する必要があります。
    (TPB/Project1ルート化されていない場合MSB、これはオプションではないことに注意してください...プラン「B」に進みます)

  4. これらの変更をチェックインできる/チェックインする必要があるかどうかわかりません... 安全のために、TPA と MSB の両方でチェックインしてください


プラン 'B' : それがうまくいかない場合は、 を削除TPA/Project1してから再分岐する必要がありますMSB。これを行う前に、すべてがマージされているMSB(そしてチェックインされている) ことを確認してください。

TFS、既存のディレクトリへの再分岐について不平を言うことがあります (の削除履歴を保持しているためTPA/Project1)...そうなるとは思いませんが、そうなった場合は、コマンド ライン ツールを使用して完全に削除する必要があります。TPA/Project1. コマンドはtf destroy... ローカル フォルダーから実行していることを確認してください。そうしTPA/Project1ないと、tf が tfs サーバー/パスを解決できない可能性があります。

チッ!
ジェームズ

于 2011-06-08T17:38:59.870 に答える