是否有一种简单的方法可以在一个分支中创建补丁,然后将其应用于 TFS 2010 中的另一个分支?
Posted
技术标签:
【中文标题】是否有一种简单的方法可以在一个分支中创建补丁,然后将其应用于 TFS 2010 中的另一个分支?【英文标题】:Is there an easy way to create a patch in one branch and then apply it to another branch in TFS 2010? 【发布时间】:2012-01-11 22:27:21 【问题描述】:我有两个服务包分支来自 TFS 2010 中的一个“主”分支。我想将更改集从一个服务包分支“传输”到另一个,而不通过主分支进行升级,也不需要进行毫无根据的合并。
“主”分支包含一个冲突的更改集,我不想与第一个服务包分支中的更改集合并。我希望第二个服务包分支以未修改的形式接收该更改集。
无根据的合并将在两个分支之间创建链接。我不希望这样的链接出现在合并对话框中。
有没有一种简单的方法可以在一个分支中创建补丁,然后将其应用到另一个分支?类似于 Subversion 中的东西。
附:我不会改变分支结构来适应这种情况。整体结构比我描述的要复杂得多,它包含许多版本、服务包、子版本等。它遵循众所周知的分支指南。
【问题讨论】:
你能说明你的分支结构吗?一定要显示分支路径。 【参考方案1】:所以你有这样的东西:
------------------------------------> MAIN
\ \
\ \
A B
你可以从 B 中创建一个 B' 分支:
------------------------------------> MAIN
\ \
\ \
A B
\
\
B'
然后从A->B'
进行毫无根据的合并。之后进行合并B'->B
。继续并销毁B'
。虽然我从来没有这样做过,但它应该可以工作。
【讨论】:
我刚刚测试了这个。完美运行。 B 中的更改集包含所有历史记录,并且合并尽可能干净。即使在我完全删除(转换为文件夹并删除)B' 之后,我仍然可以在 B 中的变更集的历史记录中看到它。这就是我想要实现的。对于非 TFS 祝福的人来说,这也比其他答案更容易指导。【参考方案2】:一种方法:
将两个分支(A 和 B)映射到 PC 上的单独文件夹中。 在 A 中找到要合并到 B 中的更改(查看分支的源代码控制历史记录,找到更改集并双击它们以列出已更改的文件),然后在目标分支中签出. (替代方案:检查所有文件 - TFS会在你签入时丢弃未更改的文件。或者拔下网线,然后运行VS,它会离线。合并后使用文件>源代码管理>上线重新上线和检查所有更改的文件) 使用合并工具(我推荐 Beyond Compare,Araxis,但除了 VS 附带的可怕工具之外的任何东西都应该这样做)将分支 A 中的每个文件合并到分支 B 中的等效文件 构建和测试分支 B 入住这避免了使用 TFS 进行任何合并,因此它不会知道这是一个合并。它只会认为你在分支 B 中写了很多代码相当快:-)
另一种方法:
将变更集从 A 合并到您的主分支中。在合并期间,包含代码的 both 变体,并在新旧代码块周围添加 #if
命令,以便它们并排共存,并且通过简单的定义在主干线中“启用”了服务包。默认情况下不应定义此定义,因此主分支代码的二进制输出不受影响。即
#if SERVICE_PACK_A
...ServicePackA code...
#else
...original Main branch code...
#endif
现在将更改合并到分支 B
【讨论】:
我正在寻找可以进行更改但不是整个文件的内容。与 TFS 相关的东西【参考方案3】:我的回答与 Jason Williams 的类似。如果您想留在“内部”TFS,那么您只有 2 个选项。进行baseless合并,或者从A合并到Main再从Main合并到B。
由于您不想执行其中任何一项操作,因此您需要在 TFS“外部”执行合并。
您需要的工具: Team Explorer,Team Foundation Power Tools,第 3 方合并工具。我喜欢 Sourcegear DiffMerge(因为它是免费的),但 Araxis、Beyond Compare 和 Winmerge 都可以正常工作。 (顺便说一句,你可以configure TFS to use a 3rd party merge tool(再次感谢杰森!))
-
获取两个 Service Pack 分支的最新信息
查看目标分支
使用合并工具对两个本地文件夹进行文件夹比较
合并从 A 到 B 的适当更改
在命令行上对 B 的本地副本运行
tfpt uu
,这将撤消在合并过程中未更改的所有文件的签出。 (这需要安装 TFS Power 工具。)
签入 B 中的未决更改
这不是很好,但我认为这是实现您想要实现的目标的唯一方法
【讨论】:
【参考方案4】:实际上,我被指出了另一个我也喜欢的解决方案。 http://geekswithblogs.net/TarunArora/archive/2011/06/06/unshelve-shelveset-created-from-one-branch-to-another.aspx
【讨论】:
以上是关于是否有一种简单的方法可以在一个分支中创建补丁,然后将其应用于 TFS 2010 中的另一个分支?的主要内容,如果未能解决你的问题,请参考以下文章
是否有一种编程方式可以在 Windows 中创建自定义网络配置文件并为其分配虚拟网络适配器?