是否可以将文件夹从一组TFS分支移动到另一组并保留未完成的更改?

时间:2018-12-14 15:30:47

标签: tfs tfvc tfs2018

目前,我们的TFS(TFVC, not git)项目包含一个文件夹,该文件夹托管了我们整个产品。此文件夹包含三个分支(Dev,Main和Release),每个分支依次包含许多个不同的子项目。我们正在尝试进行重组,以使不同的组件包含在它们自己的分支结构中。

问题:是否可以将包含在分支下的文件夹(而不是分支本身)以及其他分支中的相应文件夹移动到 new TFS项目中,同时保持关系未合并变更集的状态和状态?

以下是我们期望的最终结果的图表:

target structure

我们希望将每个“ Project 1”文件夹( )(左侧)移动到各自的分支结构(右侧)中,但是我们需要任何未合并的变更集才能“一起使用”。这就是说,如果我们尝试在新结构中从Dev合并到Main,我们将看到未在旧结构中合并的(相关)变更集的列表。

这可能吗?如果是这样,我们需要什么系列的tf / tfvc命令?我已经深入Google了,但是很短-要么因为我不知道如何用搜索友好的方式来描述它,要么根本就不可能。

我尝试过的事情:

  • 将每个文件夹直接移动/重命名到新项目中(每个目标Dev / Main / Release分支分别预先创建

    • 未合并的变更集丢失了。
    • 我所得到的只是一个“移动/重命名”变更集,该变更集出现在新分支的未合并列表中。合并 that 会导致目标分支中的所有内容都被覆盖(即release分支的文件现在与dev相同)。
    • 在+方面,待搁置的货架集在搁置时会“自动关注”
  • 将每个文件夹分支到新结构中(这次没有预先创建目标分支文件夹)

    • 这创建了三个互不相关的分支。
    • 我能够通过在它们之间进行无基础的合并(tf merge /baseless /recursive)并在冲突时获取目标分支文件来解决该问题;然后重新建立分支的父级。 (如here所述)
    • 与上述不同,文件本身最终正确(没有任何内容被覆盖)。
    • 未合并的变更集丢失了。
    • 货架被货架搁置到原始位置

如果这是解决此问题的唯一方法,那么我们愿意失去全部历史记录。最好我们保留它,即使它意味着将原始文件的“已弃用”副本存储在某个地方。我也不担心货架集“遵循”它们的来源……我们只有两个会受到影响,我们可以根据需要手动处理它们。我们正在使用本地TFS 2018。

编辑:响应已发布然后删除的答案:

我不是要移动分支,而是要在其内部提取文件夹到它们自己的相应分支结构中,而不会丢失即将发生的更改。我只在上面显示了两个级别,但实际上它们要深得多。我可以tf rename在沙箱中整个分支并获得预期的结果...但是重命名分支不是我要尝试的操作,移动文件夹会产生意外的结果。

1 个答案:

答案 0 :(得分:1)

通过在新的Dev,Main,Release分支中都具有合并关系,您似乎可以实现所需的目标。我认为您可以对上面尝试的第二条“路线”进行修改。

  1. Release> Project [x]文件夹分支到 new Project [x]> Release分支
  2. new 项目[x]>发布分支分支到 new Project [x]>主分支
  3. 合并(无基) Main> Project [x]文件夹(指定  版本从分支到)项目[x]>主分支
  4. new 项目[x]>主分支分支到 new 项目[x]> Dev分支
  5. 合并(无基础) Dev> Project [x]文件夹(指定用于 主分支从)分支到项目[x]>开发分支
  6. 重复其他项目

目标是创建新的分支合并关系(通过将[new] Release分支到[New] Main,然后将[New] Main分支到[New] Dev。此时,已经建立了合并关系,并且所有分支都是对于Main和Dev,我们将[旧]与[new]进行无基础的合并。对于Main,我们希望在Main和Release相同(旧)的状态下对基于基础的合并进行点缀。我们想在Dev和Main相同的状态下(在旧状态下)进行无基础的合并,然后可能会发生其他合并(从[旧]到[新]),并且应该将这些合并检测为从[新]的可合并更改。到[新]类似于它们在[旧]到[旧]

您将松散搁置集(但始终可以在旧位置搁置,签入并合并到新位置),但只要不破坏旧项目,就应保留历史记录。