有没有一种简单的方法可以在一个分支中创建补丁,然后将其应用到TFS 2010中的另一个分支?

时间:2012-01-11 22:27:22

标签: tfs tfs2010

我有一个服务包分支来自TFS 2010中的一个“主”分支。我想将一个更改集从一个服务包分支“传输”到另一个服务包分支而不通过主分支进行提升而不进行无基础合并。

'main'分支包含一个冲突的更改集,我不想与第一个Service Pack分支中的更改集合并。我希望第二个Service Pack分支以未修改的形式接收该更改集。

baseless合并将在两个分支之间创建一个链接。我不希望这样的链接出现在合并对话框中。

是否有一种简单的方法可以在一个分支中创建补丁然后将其应用到另一个分支?像Subversion那样的东西。

P.S。我不会改变分支结构来适应这种情况。整体结构比我描述的更复杂,并且它适用于许多版本,服务包,子版本等。它遵循着名的分支指南。

4 个答案:

答案 0 :(得分:3)

所以你有这样的事情:

------------------------------------> MAIN
      \          \
       \          \
        A          B

你可以用B创建一个B'分支:

------------------------------------> MAIN
      \          \
       \          \
        A          B
                    \
                     \
                       B'

然后从A->B'进行无基础合并。之后进行合并B'->B。继续&消灭B'。虽然我从未这样做过,但它应该有用。

答案 1 :(得分:2)

一种方法:

  • 将两个分支(A和B)映射到PC上的单独文件夹中。
  • 找到要合并到B中的A中的更改(查看分支的源控制历史记录,找到变更集并双击它们以列出已打开的文件),并在目标分支中检出它们。 (替代方案:检查所有文件 - TFS将在您办理登机手续时丢弃未更改的文件。或拔掉网络电缆,然后运行VS,它将脱机。合并后使用文件>源代码管理>上线返回在线状态检查任何已更改的文件)
  • 使用合并工具(我建议使用Beyond Compare,Araxis,除了VS附带的可怕内容之外的任何内容)从分支A中的每个文件合并到分支B中的eqiuivalent文件
  • 构建和测试分支B
  • 签入

这避免了使用TFS进行任何合并,因此它不会知道它是合并。它会认为你已经在分支B中写了很多代码: - )

另一种方法:

  • 将变更集合并到A的主分支中。在合并期间,包括代码的两个变体,并在新旧代码块周围添加#if命令,以便它们并排共存,并通过简单的定义在主干中“启用”服务包。默认情况下,不应定义此定义,因此主分支代码的二进制输出不受影响。即。

    #if SERVICE_PACK_A  
        ...ServicePackA code...  
    #else  
        ...original Main branch code...  
    #endif
    
  • 现在将更改合并到分支B

答案 2 :(得分:1)

我的答案与杰森威廉姆斯相似。如果你想留在“内部”TFS,那么你只有2个选项。执行baseless合并,或从A合并到Main,然后从Main合并到B.

由于您不想执行其中任何一项,因此您需要执行TFS“外部”的合并。

您需要的工具: Team Explorer,Team Foundation Power Tools,第三方合并工具。我喜欢Sourcegear DiffMerge(因为它是免费的),但Araxis,Beyond Compare和Winmerge也都能正常工作。 (顺便说一句,你可以configure TFS to use a 3rd party merge tool(再次感谢杰森!)

  1. 获取两个服务包分支的最新信息
  2. 查看目标分支
  3. 使用合并工具在2个本地文件夹
  4. 之间进行文件夹比较
  5. 合并A到B的适当更改
  6. 在命令行上针对B的本地副本运行tfpt uu,这将撤消在合并过程中未更改的任何文件的签出。 (这需要安装TFS电动工具。)
  7. 检入B
  8. 中的待定更改

    这不是很好,但我认为这是你想要实现的唯一方法

答案 3 :(得分:1)