在TFS中添加项目引用会重定向到项目的先前分支版本

问题描述

|| 我有一个TFS结构,看起来像这样:   $           -MainSoftwareBranch                 -Dev              -主要                       -企业                             -Project1                              -测试               -TeamProjectA                 -主要                       -企业                             -Project1                               -TeamProjectB                 -主要                       -企业                             -Project1                         这样做的最终目的是MainSoftwareBranch(MSB)包含我们公司开发的所有软件。当您需要某个软件时,可以将其分支到您的项目分支中,并在必要时添加项目参考。 在过去的某个时候,对我们的分支策略不太熟悉的人直接将Project1从TeamProjectB分支到TeamProjectA,而不是从MSB分支。我试图解决此问题,并从TeamProjectA中引用的位置删除了对$ / TeamProjectB / Main / Enterprise / Project1的项目引用。我从$ / MSB / Main / Enterprise / Project1分支了Project1,并尝试使用\“ Add Existing Project ... \”将项目添加解决方案中,并浏览到csproj文件所在的本地路径。不过,要加载的项目是$ / TeamProjectB中的项目。我已经在TFS中以及手动在csproj和sln文件删除了源代码控制绑定,但是没有任何变化。我总是要求“重定向”打开正确的csproj文件到无效的旧文件。 是否有人对导致这种奇怪行为的原因有任何见识?     

解决方法

有几件事要检查...但是在进行任何TFS /项目结构修改之前,我建议检查所有当前更改(适用于所有团队),进行最新操作以检索所有这些更改,并备份您的整个本地工作区文件夹。 我需要澄清一点,以完全回答您...正在分支哪些子文件夹?即您通常会把
MSB/Main
分支到
TeamProjectA/Main
,还是会分支单个项目,例如
MSB/Main/Enterprise/Project1
Project2
等? 第一步:在Visual Studio中检查您的工作区映射...,打开Source Control Explorer。窗口顶部有一个工作区下拉列表。选择\“ Manage Workspaces ... \”并编辑您的主工作区。 理想情况下,只有一个工作文件夹,将TFS项目的根目录(在您的情况下为\'$ \')映射到本地本地工作文件夹。如果您有多个工作文件夹,请确保第二个文件夹不是根目录的子文件夹。即您不应该为
$/TeamProjectA/Main/Enterprise/Project1
建立单独的文件夹。如果这样做,请删除它并从根目录获取最新信息。 这是我的第一个猜测,因为如果将ѭ5映射到
TeamProjectA
文件夹,则更改引用的次数无关紧要,您将始终加载Team B的项目。 第二:您只做一次分支。之后的所有内容都将合并,并且您只能在直系父母与子女之间进行合并(除非您跳过篮球圈以手动进行合并...在9个国家/地区属于可射击的攻击)。 这意味着只要将ѭ7从ѭ8分支出来,您将始终与ѭ8捆绑在一起。您可以在TFS中为每个团队和项目修复引用,但是当将
TeamProjectA
合并回
MSB
时,Project1将不会与其他所有东西合并到
MSB
。 在我心中尚不清楚会发生什么……该项目只是什么都不会合并,或者它会合并回到
TeamProjectB
的文件夹中。我高度怀疑后者是否是这种情况,但是前者也没有太大意义,我几乎希望TFS以某种方式短路。 我猜测(完整的WAG)由于您能够将
Project1
TPB
分支到
TPA
,因此您未分支
/Main
/Main/Enterprise
...我希望答案是
TFS
不允许您分支到另一个分支的子文件夹。 解决这个问题 将
Project1
合并回
TPB
。报到。 将
TPB/Project1
合并回
MSB
。报到。 选择
TPA/Project1
。转到
File -> Source Control -> Branching and Merging -> Reparent
。选择
MSB\'s Project 1
作为新的父母。如果您的分支是从
/Main
/Main/Enterprise
完成的,则无论分支根是什么,您都必须重做。 (请注意,如果
TPB/Project1
并非源自root11ѭ,那么这将不是一个选择...计划\'B \') 不确定是否可以/需要检查这些更改...为了安全起见,请同时对TPA和MSB进行检查 计划\'B \':如果这样不起作用,则必须删除
TPA/Project1
,然后从
MSB
重新分支。在执行此操作之前,请确保所有内容全部合并回到to11ѭ(并签入)。 TFS可能会抱怨重新分支到一个预先存在的目录(因为它保留了
TPA/Project1
的删除历史记录)...我认为不会,但是如果这样做,则必须使用命令行工具永久取出
TPA/Project1
。命令为
tf destroy
...请确保从本地
TPA/Project1
文件夹运行该命令,否则tf可能无法解析tfs服务器/路径。 HTH! 詹姆士     ,        项目引用与TFS无关。它们是相对于本地磁盘的引用。 现在,如果您的项目恰好位于本地磁盘上的TFS工作空间中,那么您将具有相对于该工作空间的引用。 查看各个.csproj或.vbproj文件,以查看引用的含义。我怀疑您会发现您有../../../../SomeProject.csproj之类的相对引用,其中相对路径从您的工作空间中移出,然后向下。