1

我有一个看起来像这样的 TFS 结构:

$

-主软件分支

-开发

-主要的

-企业

-项目1

-测试

-团队项目A

-主要的

-企业

-项目1

-团队项目B

-主要的

-企业

-项目1

这样做的最终目标是 MainSoftwareBranch (MSB) 包含我们公司开发的所有软件。当您需要某个软件时,您可以将其分支到您的项目分支中,并在必要时添加项目引用。

过去某个时候,对我们的分支策略不太熟悉的人将 Project1 直接从 TeamProjectB 分支到 TeamProjectA,而不是从 MSB。我已尝试解决此问题,并从 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/项目结构修改之前,我建议检查所有当前更改(针对所有团队),进行最新以检索所有这些更改,并备份您的整个本地工作区文件夹。

我需要澄清一点才能完全回答你......正在分支哪些子文件夹?IE 您通常会分支MSB/Main到IE TeamProjectA/Main,还是会分支单个项目,例如MSB/Main/Enterprise/Project1Project2等?


首先:检查您的工作区映射...在 Visual Studio 中,打开源代码管理资源管理器。窗口顶部有一个工作区下拉菜单...选择“管理工作区...”并编辑您的主工作区。

理想情况下,只有一个工作文件夹,将 TFS 项目的根(在您的情况下为“$”)映射到根本地工作文件夹。如果您有多个工作文件夹,请确保第二个不是根目录的子文件夹。IE 你不应该有一个单独的文件夹$/TeamProjectA/Main/Enterprise/Project1。如果这样做,请将其删除并从根目录执行获取最新信息。

这是我的第一个猜测,因为如果TeamProjectB/Project1映射到一个TeamProjectA文件夹,无论您更改多少次引用,您将始终加载 Team B 的项目。


第二:你只做一次分支。之后的一切都在合并,你只能在直系父母和孩子之间合并(除非你跳过箍手动搞乱合并......在 9 个国家/地区的可射击进攻)。

这意味着只要Project1从 分支TeamProjectB,您将始终被绑定到TeamProjectB...您可以为每个团队和项目修复 TFS 中的引用,但是当您合并TeamProjectA回时MSB,Project1 不会MSB与所有内容合并别的。

我不清楚会发生什么……要么该项目不与任何东西合并,要么合并回TeamProjectB's 文件夹。我非常怀疑后者是这种情况,但前者也没有多大意义……我几乎希望 TFS 以某种方式短路。

我猜(完整的 WAG)因为你能够Project1从那个分支TPBTPA你没有分支/Main或者/Main/Enterprise......我希望答案是TFS不允许你分支到另一个分支的子文件夹。


解决这个问题

  1. 合并Project1TPB. 报到。

  2. 合并TPB/Project1MSB. 报到。

  3. 选择TPA/Project1。去File -> Source Control -> Branching and Merging -> Reparent。选择MSB's Project 1作为新的父母。如果您的分支是从/Mainor完成的/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 回答