【问题标题】:Adding a project reference in TFS redirects to a previously branched version of the project♦在 TFS 中添加项目引用会重定向到项目的先前分支版本♦
【发布时间】:2011-05-31 19:08:19
【问题描述】:

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

$

-MainSoftwareBranch

-开发

-主要

-企业

-项目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 文件的请求“重定向”到无效的旧文件。

有没有人知道是什么导致了这种奇怪的行为?

【问题讨论】:

    标签: visual-studio-2010 tfs reparenting


    【解决方案1】:

    有几件事要检查...但在您进行任何 TFS/项目结构修改之前,我建议检查所有当前更改(适用于所有团队),进行最新以检索所有这些更改,并进行整个本地工作区文件夹的备份。

    我需要澄清一点才能完全回答你......正在分支哪些子文件夹? IE。您通常会将MSB/Main 分支到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 的文件夹。我非常怀疑后者是这种情况,但前者也没有多大意义……我几乎希望 TFS 以某种方式短路。

    我猜(完整的 WAG)因为您能够将 Project1TPB 分支到 TPA,所以您没有分支 /Main/Main/Enterprise... 我希望答案是TFS 不允许您分支到另一个分支的子文件夹。


    解决此问题

    1. Project1 合并回TPB。入住。

    2. TPB/Project1 合并回MSB。入住。

    3. 选择TPA/Project1。转到File -> Source Control -> Branching and Merging -> Reparent。选择 MSB's Project 1 作为新的父级。如果您的分支是从/Main/Main/Enterprise 完成的,那么无论分支根是什么,您都必须重新设置。
      (请注意,如果 TPB/Project1 不是源自 MSB,这将不是一个选项...转到计划“B”)

    4. 不确定您是否可以/是否需要检查这些更改...在 TPA 和 MSB 上进行检查以确保安全


    Plan 'B':如果这不起作用,您将不得不删除 TPA/Project1 并从 MSB 重新分支。在执行此操作之前,请确保将所有内容完全合并回MSB(并签入)。

    TFS 可能抱怨重新分支到预先存在的目录(因为它保留了 TPA/Project1 的删除历史记录)...我不认为它会,但如果它确实,您将不得不使用命令行工具永久删除TPA/Project1。命令是tf destroy...确保从本地TPA/Project1 文件夹运行它,否则tf 可能无法解析tfs 服务器/路径。

    HTH!
    詹姆斯

    【讨论】:

    • 我们几乎总是在代码项目级别进行分支。工作区映射仅在团队项目级别,每个团队项目有一张地图。
    【解决方案2】:

    项目引用与 TFS 无关。它们是相对于您的本地磁盘的引用。

    现在,如果您的项目恰好位于本地磁盘上的 TFS 工作区中,那么您将拥有相对于该工作区的引用。

    查看各个 .csproj 或 .vbproj 文件以查看引用的内容。我怀疑你会发现你有像 ../../../../SomeProject.csproj 这样的相对引用,其中相对路径从你的工作区上升,然后又下降。

    【讨论】:

    • 我正在尝试将 .csproj 文件添加到解决方案中。当我右键单击解决方案时,然后单击“添加现有项目”,我会看到一个资源管理器窗口。我单击了我想要的 .csproj 文件 ($/TeamProjectA/Main/Enterprise/Project1),但被重定向到 $/TeamProjectB/Main/Enterprise/Project1。
    • @Barry:“重定向”到底是什么意思?此外,您的资源管理器窗口实际上是浏览源代码控制 ($/) 还是浏览本地磁盘?另外,添加项目不是添加项目引用,而是添加项目。
    • 浏览本地磁盘。我从 c:\projects\teamprojecta\main\enterprise\project1 中选择 project1.csproj,添加到解决方案中的项目是位于 c:\projects\teamprojectb\main\enterprise\project1 的项目。
    • @Barry:还有其他事情发生。仔细检查您的工作区定义。也许您的工作区包含来自多个分支的代码。另外,您是否尝试过我的建议并真正查看 .csproj 文件?对 .sln 文件执行相同操作。
    猜你喜欢
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 2020-04-10
    • 2014-05-21
    • 2018-07-27
    • 2019-03-29
    相关资源
    最近更新 更多