在TFS2008中重新分支一个分支

时间:2009-10-15 08:37:44

标签: tfs merge branch

假设我在TFS中有分支A,我从中获取分支B.一些变更集在B上进行,然后从B,分支C进行,并对分支C进行更多更改

A ------------------------------
     |
B    ----1--2------------------
                 |
C                ----3-----4---

现在假设我们想要从C合并到A中,但绕过B.TFS不允许这样做 - 我必须进行无基础合并,这可能非常容易出错。真的,我想让C“重新定义”(如果这是正确的术语)所以它是A的孩子,而不是B.换句话说,我想最终得到以下分支结构。 (C'可以是原始的C分支,也可以是C应该是的新分支。)

A ------------------------------
     |   |
B    |   ----1--2------------------
     |           
C'   |-------1--2----3-----4---

现在C'可以正确地合并到A中,而无需进入B.

我的问题是,是否有任何自动化工具/脚本可以设置创建C'分支所需的挂起更改,因为手动执行此操作会花费我们很长时间?

1 个答案:

答案 0 :(得分:5)

在TFS中重新分配分支很难。你可以通过baseless merge有效地给它一个额外的父,但是:

  • 毫无根据的合并是繁琐的&如你所知,容易出错
  • 没有用于删除与“真实”父级的合并关系的命令或API,缺少Destroy
  • 您将无法通过VS 2005/2008合并向导
  • 在新方向上执行合并

你似乎要求的 - 我同意是最好的解决方案 - 是一个名为C'的全新分支,恰好具有与C今天相同的内容。以下是实现这一目标的快捷方法:

  1. 使用普通的“分支”对话框创建新分支。如果它必须与C同名,那没关系,只需先将C重命名为C_old。您需要确定是否适合从最新版本或旧版本的A版本进行分支。(如果有帮助,您可以在“属性”对话框中看到B分支的版本。)
  2. 从磁盘删除新的C目录。
  3. 将命令提示符导航到C_old目录,然后运行 tfpt scorch -diff -deletes 。这将确保C_old是最新的,并且不包含任何无关的文件(例如构建工件)。
  4. 复制C_old - >下进行。
  5. 导航到C,然后运行 tfpt online -adds -deletes -diffs。 -r 即可。这将添加,编辑和&根据需要删除服务器以记录A [作为分支]和C [表示在磁盘上]之间的差值。
  6. 这种方法的唯一缺点是你不会看到变化3& 4在历史上。当然,他们仍然会在C_old之下,但是像Annotate这样的工具不会知道 - 他们会在你创建C'的那一刻看到这些变化同时发生,而没有单独的评论/工作项/等