Version control 当只有最新的文件可用时,在TFS源代码管理中重新创建分支结构

Version control 当只有最新的文件可用时,在TFS源代码管理中重新创建分支结构,version-control,tfs,Version Control,Tfs,我们从另一个源代码管理系统迁移。来自每个分支的最新文件已签入TFS 2010源代码管理中的文件夹,我们在每个顶级分支文件夹上使用了“转换为分支”命令。自初始签入以来,主干和分支上的工作已经完成 但是,我们不能从GUI进行合并,因为TFS不了解分支之间的关系。“reparent”命令不提供任何选项。有没有办法使用tf merge/baseless/discard/recursive来建立关系?这会不会导致问题,因为在最初的签入之后会有签入?我刚刚花了6个月的时间将大约100个VSS存储库迁移到TF

我们从另一个源代码管理系统迁移。来自每个分支的最新文件已签入TFS 2010源代码管理中的文件夹,我们在每个顶级分支文件夹上使用了“转换为分支”命令。自初始签入以来,主干和分支上的工作已经完成


但是,我们不能从GUI进行合并,因为TFS不了解分支之间的关系。“reparent”命令不提供任何选项。有没有办法使用
tf merge/baseless/discard/recursive
来建立关系?这会不会导致问题,因为在最初的签入之后会有签入?

我刚刚花了6个月的时间将大约100个VSS存储库迁移到TFS,所以我感觉到了您的痛苦!我只在2008年TFS中做过,但没有理由不在2010年工作

我将把毫无根据的合并视为最后的手段,因为您将无法从命令行执行合并

技巧是在导入代码之前建立分支之间的关系

(我将使用一个简单的单开发分支作为示例,但无论分支的数量如何,您都应该能够使用相同的理论)

  • 创建一个新的团队项目,创建“主干”,然后分支到“开发人员”。现在应该有两个空分支

  • 将代码导入到“trunk”和“dev”中

  • 从“trunk”合并到“dev”,几乎肯定会有很多冲突,TFS应该足够聪明,可以忽略相同但不总是相同的文件和文件夹。您需要决定要保留哪些冲突文件(通常是“dev”分支中的文件,但您可能希望身边有理解代码的人来做出决定)

  • 现在,您应该有两个分支,其中充满了具有关系的代码

    如果您有多个“dev”分支,那么我认为您应该始终首先从“trunk”合并到“dev”,这将建立关系,并为您提供将代码版本保留在“dev”中的选项,因为这可能比“trunk”中的版本更新

    在您的特定情况下,我将遵循上述步骤,但您可以将代码从“旧”团队项目分支到新项目,而不是从文件系统导入文件(步骤2)

    $/oldTeamProject/Devbranch
    分到
    $/NewTeamProject/Devbranch
    $/oldTeamProject/Trunk
    分到
    $/NewTeamProject/Trunk

    然后将
    $/NewTeamProject/Trunk
    合并到
    $/NewTeamProject/DevBranch

    我在2008年的TFS中做过几次这样的事情,效果很好(除了最初解决冲突的痛苦)。说到这里,我建议您进行一次“测试”迁移,以确保您已经覆盖了所有角度。如果这一切正常,那么您可以保留结果,如果没有,您应该为真正的迁移吸取一些教训:-)


    如果您重命名了任何文件或文件夹,那么TFS将不知道如何建立关系,并且在合并后,您的“dev”分支中会出现重复。如果在文件夹级别执行无基础合并,则会出现同样的问题。恐怕这不是一个简单的办法。你只需要留意任何看起来像被重命名的东西,并在合并后手动解决它们

    我们即将升级到TFS 2010,由于2008年安装中的数据库出现问题,我们决定安装一个新的副本,以避免拖累等待爆炸的潜在定时炸弹,因此我们将遇到同样的问题。急切地等待任何关于这一点的好答案。感谢详细的策略。在步骤2的“分支”版本中,挂起的更改是什么样子的?会有吗?我肯定会在沙箱里试一试。我们有很多重命名和移动的文件/文件夹。这将是丑陋的:)。当您将“dev”从旧团队项目分支到新团队项目时,它应该与任何其他分支操作一样,因此您将看到许多“branch,add”挂起的更改,签入应该不会很痛苦。我建议采用这种方法,因为您可能希望保留历史记录,因为您进行了初始迁移。如果您不这样做,那么从“旧”项目中获取最新信息并将其复制到新工作区,然后从那里添加可能会更容易。步骤1(建立关系)和步骤3(解决冲突)是最重要的部分。如何将代码添加到分支取决于您。祝你好运@我希望你能给我一个答案,因为这是一个老线索。我这样做是为了在VSO(目标)和另一个托管TFS实例(我们的访问权限有限)之间进行迁移。只是为了确认我了解你的流程2。将您的代码导入到
    trunk
    dev
    -您的意思是将代码从FS复制到各自创建的TFS分支,按原样签入,然后(3)执行从
    trunk
    dev
    的TFS合并?Hi@Igor。你是对的,但是,自从我回答这个问题以来,世界已经向前发展,如果你要从TFS转到VSO,那么你可以使用一个可以帮助你的工具。我想看看这是否比答案好here@JamesReed-非常感谢!我确实研究过这个工具,但似乎只有当您有一个自托管的TSF实例,并且我们的实例由第三方托管,并且只有严格的TFS API访问权限时,您才能使用它。