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

pin*_*x33 8 tfs tfvc tfs2018

目前,我们的TFS(TFVC,而不是 git)项目包含一个托管我们整个产品的文件夹.该文件夹包含三个分支(Dev,Main和Release),每个分支又包含许多不同的子项目.我们正在尝试重组,以便不同的组件包含在它们自己的分支结构中.

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

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

目标结构

我们希望将每个"Project 1" 文件夹(左侧)移动到它们自己的分支结构(右侧),但我们需要任何未合并的更改集来"出现".也就是说,如果我们尝试在新结构中从Dev合并到Main,我们将看到一个未在旧结构中合并的(相关)变更集的列表.

这可能吗?如果是这样,我们需要用什么系列的tf/ tfvc命令来解决这个问题呢?我已经深入谷歌了,但是做得很短 - 或者因为我不知道如何用搜索友好的方式描述这个,或者它根本不可能.

我尝试过的:

  • 直接将每个文件夹移动/重命名为新项目(预创建每个目标开发/主要/发布分支​​)

    • 未合并的变更集丢失了.
    • 我得到的只是一个"移动/重命名"变更集,它出现在新分支的未合并列表中.合并导致在目标分支都被覆盖(即发布分支的文件和现在相同的开发).
    • 在+侧,挂起的搁置集"自动跟随"时未取消搁置
  • 分支每个文件夹,进入新结构(此时无需预先创建目标分支文件夹)

    • 这创建了三个彼此无关的分支.
    • 我能够通过在它们之间进行无根合并(tf merge /baseless /recursive)和冲突时获取目标分支文件来解决这个问题.然后重新教育分支机构.(至于解释这里)
    • 与上述不同,文件本身最终正确(没有被覆盖).
    • 未合并的变更集丢失了.
    • Shelvesets不受原始位置的影响

如果这很重要,我们愿意失去整体历史,如果这是解决这个问题的唯一方法.我们最好保留它,即使它意味着在某处存储原文的"已弃用"副本.我不太关心搁置"跟随"他们的来源......我们只有两个会受到影响,如果需要我们可以手动处理.我们正在使用本地TFS 2018.

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

我不打算移动分支,而是将其内部的文件夹提取到它们自己的相应分支结构中,而不会丢失挂起的更改.我只展示了两个级别,但实际上它们更深入.我能够tf rename在沙盒中的整个分支并获得预期的结果......但重命名分支不是我想要做的,并且移动文件夹会产生意想不到的结果.

Jan*_*tee 1

看来您可以通过新的 Dev、Main、Release 分支旧项目文件夹的合并关系来实现您想要的目标。我认为你可以对上面尝试的第二条“路线”进行变体。

  1. 将旧的Release > Project[x] 文件夹分支到新的文件夹中Project[x] > Release 分支
  2. 项目 [x] > 发布分支分支到项目 [x] > 主分支
  3. 旧的Main > Project[x] 文件夹(指定版本分支的变更集)合并(无基础)到新的Project[x] > Main 分支
  4. 新的Project[x] > Main Branch 分支到新的Project[x] > Dev 分支
  5. 旧的Dev > Project[x] 文件夹(指定Main 分支的变更集 )合并(无基础)到新的Project[x] > Dev 分支
  6. 对其他项目重复此操作

目标是创建新的分支合并关系(通过将 [new] Release 分支到 [New] Main,然后将 [New] Main 分支到 [New] Dev。此时,合并关系已经建立,所有分支都在同一个分支中。状态。然后我们将 main 和 Dev 的 [old] 毫无根据地合并到 [new]。对于 Main 来说,我们想要在 Main 和 Release 相同的状态(在旧版本中)进行无根据的合并。对于 Dev 我们想要在 Dev 和 Main 相同(旧)的状态上进行无基础合并。然后可能会发生从 [old] 到 [new] 的额外合并,并且这些应该被检测为从 [new] 到 [new] 的可合并更改] 类似于他们在[旧]到[旧]中的情况

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