代码之家  ›  专栏  ›  技术社区  ›  Mark Heath

在tfs2008中重新创建分支

  •  4
  • Mark Heath  · 技术社区  · 15 年前

    假设我在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 回复  |  直到 15 年前
        1
  •  5
  •   Richard Berg    15 年前

    在tfs中重新创建分支很困难。您可以通过无基合并有效地给它一个额外的父级,但是:

    • 如您所知,无基合并是乏味且容易出错的
    • 没有用于删除与“真实”父级的合并关系的命令或API,缺少销毁
    • 您将无法通过VS 2005/2008合并向导在新方向上执行合并。

    你所要求的——我同意是最好的解决方案——是一个名为“C”的全新分支,其内容恰好与C今天所要求的内容相同。以下是实现这一目标的快速方法:

    1. 使用“普通分支”对话框创建新分支。如果它必须与C同名,那没关系,只需先将C重命名为C。您需要决定是从A的最新版本分支还是从A的某个较旧版本分支(如果它有帮助,您可以在“属性”对话框中看到B从中分支的版本)。
    2. 从磁盘中删除新的C目录。
    3. 将命令提示导航到旧目录,然后运行 tfpt scorch-diff-删除 .这将确保旧版本是最新的,并且不包含任何外来文件(例如,构建工件)。
    4. 复制旧的C>C。
    5. 导航到C,然后运行 tfpt联机-添加-删除-差异。-R . 这将挂起添加、编辑和删除,以便服务器记录[已分支]和[在磁盘上表示]之间的增量。
    6. 签入

    这种方法的唯一缺点是在历史记录中看不到更改3和4。当然,它们仍然是C语言,但是像annotate这样的工具不会知道——它们会看到这些更改在您创建C语言的日期立即发生,没有单独的注释/工作项等。