我的TFS结构看起来像这样:
$
-MainSoftwareBranch
-DEV
-Main
- 企业
-Project1
-Test
-TeamProjectA
- 主要
- 企业
-Project1
-TeamProjectB
- 主要
- 企业
-Project1
最终目标是MainSoftwareBranch(MSB)包含我们公司开发的所有软件。当您需要一个软件时,将其分支到项目分支并在必要时添加项目引用。
在过去的某个时候,一些不太熟悉我们的分支策略的人将Project1直接从TeamProjectB分支到TeamProjectA而不是MSB。我试图修复此问题,并从TeamProjectA中引用它的位置删除了对$ / TeamProjectB / Main / Enterprise / Project1的项目引用。我从$ / MSB / Main / Enterprise / Project1分支Project1并尝试使用“添加现有项目...”将项目添加到解决方案并浏览到csproj文件所在的本地路径。加载的项目是来自$ / TeamProjectB的项目。我已经删除了源代码控制绑定,无论是在TFS内还是在csproj和sln文件中手动删除,但没有任何变化。它总是“重定向”我的请求,打开正确的csproj文件到无效的旧文件。
是否有人对可能造成这种奇怪行为的原因有任何见解?
答案 0 :(得分:0)
项目参考与TFS无关。它们是相对于本地磁盘的引用。
现在,如果您的项目恰好位于本地磁盘上的TFS工作区中,那么您将获得相对于工作区的引用。
查看单个.csproj或.vbproj文件以查看引用的内容。我怀疑你会发现你有相对的引用,如../../../../SomeProject.csproj,其中相对路径从你的工作区上升然后再下降。
答案 1 :(得分:0)
要检查的一些事项......但在进行任何TFS /项目结构修改之前,我建议检查所有当前更改(针对所有团队),执行get-latest以检索所有这些更改,并进行整个本地工作区文件夹的备份。
有一点我需要澄清以完全回答你...哪些子文件夹正在分支? I.E.您通常会将MSB/Main
分支到TeamProjectA/Main
,还是会分支单个项目,例如MSB/Main/Enterprise/Project1
,Project2
等?
第一个:检查您的工作区映射...在Visual Studio中,打开Source Control Explorer。窗口顶部有一个工作区下拉菜单...选择“管理工作区......”并编辑主工作区。
理想情况下,只有一个工作文件夹,将TFS项目的根目录(在您的情况下为“$”)映射到根本地工作文件夹。如果您有多个工作文件夹,请确保第二个工作文件夹不是根目录的子文件夹。 I.E.您不应该为$/TeamProjectA/Main/Enterprise/Project1
设置单独的文件夹。如果您这样做,请将其删除并从根目录中获取最新信息。
这是我的第一个猜测,因为如果将TeamProjectB/Project1
映射到TeamProjectA
文件夹,更改引用次数无关紧要,您将始终加载B团队的项目。< / p>
第二:您只进行一次分支。之后的所有东西都在合并,你只能在直接的父母和孩子之间合并(除非你跳过篮球手动混乱合并......在9个国家的可射击进攻)。
这意味着只要Project1
从TeamProjectB
分支,您就会始终与TeamProjectB
绑定...您可以修复TFS中每个团队的参考资料对于项目,但是当您将TeamProjectA
合并回MSB
时,Project1将不会与其他所有内容合并到MSB
。
在我看来,我不清楚会发生什么......要么项目不与任何东西合并,要么合并回TeamProjectB
的文件夹。我非常怀疑后者是这种情况,但前者没有多大意义,或者......我几乎都期望TFS在某种程度上会短路。
我猜测(完整的WAG),因为您能够将Project1
从TPB
分支到TPA
,而您不是/Main
或{{1}我希望答案是/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
,则不会选择此选项...转到计划'B')
不确定是否可以/需要检查这些更改...在TPA和MSB上办理登机手续以确保安全
计划'B':如果不起作用,则必须删除MSB
并从TPA/Project1
重新分支。确保在执行此操作之前将所有内容合并到MSB
(并签入)。
TFS 可能抱怨重新分支到预先存在的目录(因为它保留了MSB
的删除历史记录... ...我不认为它会,但如果确实如此,您必须使用命令行工具永久删除TPA/Project1
。命令为TPA/Project1
...确保从本地tf destroy
文件夹运行它,或者tf可能无法解析tfs服务器/路径。
HTH!
詹姆斯