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


    这是在并行开发中,由于不正确的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的代码
    1. 将QA分支回滚到最初版本(QA 1),形成QA 3。这是将DEV A的代码从QA中移除,得到一个“干净”的版本。
    2. 将QA 3 merge到DEV B,形成DEV B 3。这是将DEV A的代码从DEV B中移除。
    3. 继续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不会提交任何改动。

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

    1. 将DEV A分支回滚到最初版本(DEV A1),形成DEV A4。
    2. 将DEV A4 merge 到QA。
    3. 将DEV A分支重新回滚到最后改动的版本(DEV A3),形成DEV A5。
    4. 将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

  • 相关阅读:
    ActiveMQ (一) 简介
    MSMQ .NET下的应用
    MSMQ
    RabbitMq C# .net 教程
    Rabbit MQ
    Dynamics 365—脚本
    DNS服务器地址汇总
    特殊字符 编码
    4s前置摄像头调用
    登陆前后导航栏处理 2015-12-12
  • 原文地址:https://www.cnblogs.com/hiteddy/p/Team_Fundation_Server_TFS_Remove_Changes_Made_By_Merge.html
Copyright © 2020-2023  润新知