SVN trunk(主线) branch(分支) tag(标记)

使用场景

假如你的项目的某个版本(例如1.0版本)已经完成开发、测试并已经上线了,接下来接到新的需求,新需求的开发需要修改多个文件中的代码,当需求已经开始开发一段时间的时候,突然接到用户或测试人员的反馈,项目中有个重大bug需要紧急修复,并且要求bug修复后要立即上线;此时应该怎么修复bug呢?

是在当前已经开发新需求的基础上进行修复吗?答案是否定的,原因是:如果是在已经开发新需求的基础上进行修复bug,那么新需求还没开发好,更没有测试,怎么立刻(或最可能快的)上线?另外如果新功能的开发和bug修复的代码都涉及到同一段代码冲突了怎么办 。

很显然不能在当前开发的代码基础上进行bug修复工作

那么就可以在当时完成的那个版本中进行bug修复,这样带来的好处是:

    bug修复好之后可立即上线,不会因为新需求还没有完成或测试而延迟上线时间
    bug修复是在原来上线的那个版本进行修复的,引起新bug的风险小,如果是在新需求的基础上修复bug, 那么新功能可能会带来新的bug

 

SVN仓库一般包含的目录结构:

    truck           (主干|主线|主分支):是用来做主方向开发的,新功能的开发应放在主线中,当模块开发完成后,需要修改,就用branch
    branches     (分支):分支开发和主线开发是可以同时进行的,也就是并行开发,分支通常用于修复bug时使用
    tags            (标记):用于标记某个可用的版本,可以标记已经上线发布的版本,也可以标记正在测试的版本,通常是只读的

 

开发流程

1、主线版本开始,项目名称test

目录:

Repository/trunk/test

Repository/branches/test

Repository/tags/test

具体的组织形式可以自定,也可以

Repository/test/trunk

Repository/test/branches

Repository/test/tags

 

2、主线开发完成1.0版本,使用Branch/Tag命令将主线标记一份到1.0版本目录中,交给生产环境部署;(注意,Branch/Tag命令不会直接拉取文件下来,需要update一次)

目录:Repository/test/tags/1.0

SVN trunk(主线) branch(分支) tag(标记)

SVN trunk(主线) branch(分支) tag(标记)

SVN trunk(主线) branch(分支) tag(标记)

SVN trunk(主线) branch(分支) tag(标记)

2、主线开始开发1.1版本,但突然生产环境1.0版本出现bug,此时,使用Branch/Tag命令将tag里面的1.0版本分支一份到branches目录

目录:Repository/branches/test/1.0

SVN trunk(主线) branch(分支) tag(标记)

SVN trunk(主线) branch(分支) tag(标记)

SVN trunk(主线) branch(分支) tag(标记)

SVN trunk(主线) branch(分支) tag(标记)

3、使用branch分支版本进行bug修复并提交代码到1.0分支,交给生产环境部署,部署没有问题之后,使用Branch/Tag命令将1.0分支标记一份到1.0.1目录;(当然也可以先tag到1.0.1,然后将1.0.1交给生产环境部署,但部署如果还是有bug,就需要重新处理bug,重新tag了)

目录:Repository/test/tags/1.0.1 (注意:该tag是从branch中的1.0版本tag过来的)

SVN trunk(主线) branch(分支) tag(标记)

SVN trunk(主线) branch(分支) tag(标记)

SVN trunk(主线) branch(分支) tag(标记)

SVN trunk(主线) branch(分支) tag(标记)

4、在Repositorytest/trunk目录上使用merge命令,将分支合并到主线,合并的时候可能有冲突,处理好即可。合并后需要提交,合并后分支可删除也可保留

SVN trunk(主线) branch(分支) tag(标记)

SVN trunk(主线) branch(分支) tag(标记)

SVN trunk(主线) branch(分支) tag(标记)

SVN trunk(主线) branch(分支) tag(标记)

5、有的时候可能同时有几个人处理多个bug,这样就会有多个分支,这个时候另外一个开发人员将bug修复并提交到了trunk,那么就应该及时从trunk合并merge一份到当前分支;

方法和branch合并到trunk一样,只是是在branches/1.0目录是执行合并,Url to merge from的地址是trunk地址了

上一篇:Repository


下一篇:一文教你用Flutter2.0搭建自己的个人博客