您的位置:首页 > 编程语言

TFS - 在某分支中"移除"另一分支带来的代码

2012-09-07 14:36 411 查看
这是在并行开发中,由于不正确的merge/branch操作,导致分支B中混进了分支A的代码,但是分支B需要在分支A之前发布到生产环境。本文记录了如何将分支A所引进的代码从分支B中移除。

问题描述

并行开发就是同一个项目有两个不同版本同时在开发。按照正常流程,每个版本都应该各自从主分支(Production)中建立QA分支和DEV分支进行开发,互不干扰。

如下图,A版本和B版本都派生自PRD,互相独立,任一个先发布到生产环境都是没有问题的。



然而在实际操作中并没有严格按照此流程。当B开始的时候,A已经将近完成并且已经从DEV merge到了QA。笔者在这里犯了一个错误,直接从A版本的QA branch了一个DEV B分支做B版本的开发,这样DEV B中就混进了DEV A的代码。

此时不幸的消息传来,B版本需要在A版本之前发布。这意味着必须将A的代码从B中移除。



解决方法

这里需要做两件事,一是将A代码从DEV B中移除,然后按照正常流程提交到QA和Production,二是因为之前移除了A的代码,所以需要重新将A的代码提交。

手动修改代码显然不具可操作性,这里描述的是如何通过TFS来操作。

操作中会多次使用到“回滚”(rollback)。在当前所使用的TFS版本中并没有单独的一个“回滚”的功能,但可以通过一个迂回的方式来实现。具体可以参照MSDN上的说明 How to: Roll Back a Changeset

从DEV B中移除DEV A的代码

将QA分支回滚到最初版本(QA 1),形成QA 3。这是将DEV A的代码从QA中移除,得到一个“干净”的版本。

将QA 3 merge到DEV B,形成DEV B 3。这是将DEV A的代码从DEV B中移除。

继续B的开发,开发完成后Merge到QA,形成QA 4,然后merge到Production,发布到产品环境。



至此B的开发,部署已经完成。

将DEV A 的代码重新提交到QA
由于此先已将DEV A的代码从QA中移除(QA2 –> QA3),所以需要重新提交。那么可以直接将DEV A3 merge到QA来重新提交吗? 尝试后发现并没有效果,原因是DEV A3已经曾经merge过到QA,TFS会将DEV A1~DEV A3标记成“已经提交”,所以后续再做merge不会提交任何改动。

最终的方案是使用两次回滚操作,如下

将DEV A分支回滚到最初版本(DEV A1),形成DEV A4。

将DEV A4 merge 到QA。

将DEV A分支重新回滚到最后改动的版本(DEV A3),形成DEV A5。

将DEV A5 merge 到QA。任务完成。

注意这里的实际作用是使DEV上有版本改动,从而使TFS识别改动并merge到QA。如下图



冲突处理(Conflicts)

回滚步骤: 1. Get specified version; 2. Check out 整个文件夹; 3. 处理冲突; 4. Check in.

回滚操作 (DEV A3 => DEV A 4; DEV A4 => DEV A5; QA 2 => QA 3; DEV A4 => QA 5) : 所用冲突都使用本地版本(take local),即更早的版本

其他Merge操作: 自动或者手动Merge,两个分支的改动都需包含在内.

题外话:HTML5 Canvas

上述版本树(Version Tree)使用HTML5 canvas画出来的。源代码在此:TFSVersionTree.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐