我有一个服务包分支来自TFS 2010中的一个“主”分支。我想将一个更改集从一个服务包分支“传输”到另一个服务包分支而不通过主分支进行提升而不进行无基础合并。
'main'分支包含一个冲突的更改集,我不想与第一个Service Pack分支中的更改集合并。我希望第二个Service Pack分支以未修改的形式接收该更改集。
baseless合并将在两个分支之间创建一个链接。我不希望这样的链接出现在合并对话框中。
是否有一种简单的方法可以在一个分支中创建补丁然后将其应用到另一个分支?像Subversion那样的东西。
P.S。我不会改变分支结构来适应这种情况。整体结构比我描述的更复杂,并且它适用于许多版本,服务包,子版本等。它遵循着名的分支指南。
答案 0 :(得分:3)
所以你有这样的事情:
------------------------------------> MAIN
\ \
\ \
A B
你可以用B创建一个B'分支:
------------------------------------> MAIN
\ \
\ \
A B
\
\
B'
然后从A->B'
进行无基础合并。之后进行合并B'->B
。继续&消灭B'
。虽然我从未这样做过,但它应该有用。
答案 1 :(得分:2)
一种方法:
这避免了使用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(再次感谢杰森!)
tfpt uu
,这将撤消在合并过程中未更改的任何文件的签出。 (这需要安装TFS电动工具。)这不是很好,但我认为这是你想要实现的唯一方法
答案 3 :(得分:1)