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

时间:2011-05-31 19:08:20

标签: visual-studio-2010 tfs tfs2010 reparenting

我的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文件到无效的旧文件。

是否有人对可能造成这种奇怪行为的原因有任何见解?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

要检查的一些事项......但在进行任何TFS /项目结构修改之前,我建议检查所有当前更改(针对所有团队),执行get-latest以检索所有这些更改,并进行整个本地工作区文件夹的备份。

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


第一个:检查您的工作区映射...在Visual Studio中,打开Source Control Explorer。窗口顶部有一个工作区下拉菜单...选择“管理工作区......”并编辑主工作区。

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

这是我的第一个猜测,因为如果将TeamProjectB/Project1映射到TeamProjectA文件夹,更改引用次数无关紧要,您将始终加载B团队的项目。< / p>


第二:您只进行一次分支。之后的所有东西都在合并,你只能在直接的父母和孩子之间合并(除非你跳过篮球手动混乱合并......在9个国家的可射击进攻)。

这意味着只要Project1TeamProjectB分支,您就会始终与TeamProjectB绑定...您可以修复TFS中每个团队的参考资料对于项目,但是当您将TeamProjectA合并回MSB时,Project1将不会与其他所有内容合并到MSB

在我看来,我不清楚会发生什么......要么项目不与任何东西合并,要么合并回TeamProjectB的文件夹。我非常怀疑后者是这种情况,但前者没有多大意义,或者......我几乎都期望TFS在某种程度上会短路。

我猜测(完整的WAG),因为您能够将Project1TPB分支到TPA,而您不是/Main或{{1}我希望答案是/Main/Enterprise不允许你分支到另一个分支的子文件夹。


要解决此问题

  1. TFS合并回Project1。办理登机手续。

  2. TPB合并回TPB/Project1。办理登机手续。

  3. 选择MSB。转到TPA/Project1。选择File -> Source Control -> Branching and Merging -> Reparent作为新父级。如果您的分支是从MSB's Project 1/Main完成的,则必须从分支根目录中重新分配。
    (请注意,如果/Main/Enterprise未来自TPB/Project1,则不会选择此选项...转到计划'B')

  4. 不确定是否可以/需要检查这些更改...在TPA和MSB上办理登机手续以确保安全


  5. 计划'B':如果不起作用,则必须删除MSB并从TPA/Project1重新分支。确保在执行此操作之前将所有内容合并到MSB(并签入)。

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

    HTH!
    詹姆斯