我有一个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文件的请求"重定向"到无效的旧文件。
有人知道是什么导致了这种奇怪的行为吗?
有几件事需要检查。。。但是,在您进行任何TFS/项目结构修改之前,我建议您签入所有当前更改(针对所有团队),获取最新信息以检索所有这些更改,并备份整个本地工作区文件夹。
有一点我需要澄清才能完全回答你。。。正在分支哪些子文件夹 即,您通常会将MSB/Main
分支到TeamProjectA/Main
,还是将单个项目(例如MSB/Main/Enterprise/Project1
、Project2
等)分支。?
第一个:;检查您的工作区映射。。。在Visual Studio中,打开源代码管理资源管理器 窗口顶部有一个工作区下拉列表。。。选择"管理工作空间…"并编辑您的主工作空间。
理想情况下,只有一个工作文件夹,将TFS项目的根(在您的情况下为"$")映射到根本地工作文件夹 如果您有多个工作文件夹,请确保第二个不是根目录下的子文件夹 也就是说,$/TeamProjectA/Main/Enterprise/Project1
不应该有单独的文件夹 如果你这样做了,删除它并从根目录获取最新信息。
这是我的第一个猜测,因为如果TeamProjectB/Project1
映射到TeamProjectA
文件夹,那么无论更改引用多少次,都将始终加载Team B的项目。
第二次:您只执行一次分支 之后的一切都在合并,你只能在直系父母和孩子之间合并(除非你跳过重重关卡手动处理合并……在9个国家,这是一种可射击的进攻)。
这意味着,只要Project1
是从TeamProjectB
分支出来的,你就会一直与TeamProjectB
联系在一起。。。您可以为每个团队和项目修复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
不是从MSB
派生的,则这将不是一个选项…转到计划"B") -
不确定您是否可以/需要在中检查这些更改…在TPA和MSB上进行检查以确保的安全
计划"B":如果不起作用,则必须删除TPA/Project1
并从MSB
重新分支。在执行此操作之前,请确保所有内容都已完全合并回MSB
(并签入)。
TFS可能会抱怨重新分支到预先存在的目录(因为它保留了TPA/Project1
的删除历史记录)。。。我不认为会,但如果会,您将不得不使用命令行工具永久删除TPA/Project1
。命令是tf destroy
。。。请确保从本地TPA/Project1
文件夹运行它,否则tf可能无法解析tfs服务器/路径。
啊
James
项目引用与TFS无关。它们是相对于本地磁盘的引用。
现在,如果您的项目恰好位于本地磁盘上的TFS工作区中,那么您将拥有相对于该工作区的引用。
查看各个.csproj或.vbproj文件内部的引用,看看它们是对什么的引用。我怀疑您会发现您有../../..之类的相对引用/SomeProject.csproj,其中相对路径从工作区向上,然后向下。