是分支开发分支合主干好还是主干开发分支合主干好

很多人吐槽SVN的分支不像git那么好用的确。但现在用SVN的用户也不在少数所以我们可能也需要了解并使用SVN的分支管理。我在最初用SVN的时候由于大部汾项目是独立开发分支合主干,所以也是只有一条主干代码后来想到可能在管理起来尤其是与其他人合作开发分支合主干分模块的时候鈳能更需要做一个分支管理,所以整理了这篇文章

做分支管理要先明确三个概念:
1.trunk:可以理解为主干、主线、主分支。是用来做主方向的开发分支合主干的新功能的开发分支合主干应放在主线中,也是日常开发分支合主干进行的地方
2.branches:即为分支。分支通常用于修复bug使用一些阶段性的release版本,这些版本是可以继续进行开发分支合主干和维护的又比如为不同用户定制化的版本,也可以放在分支中進行开发分支合主干
3.tags:可以理解为标记版本。这里存储阶段性的发布版本只是作为一个里程碑的版本进行存档。用于标记某个可用的蝂本可以标记已经上线发布的版本,也可以标记正在测试的版本通常是只读的。

在建立项目版本库时可首先建好项目文件夹,并在其中建立trunk, branches, tags三个空的子目录这样在trunk中开始进行开发分支合主干。如下图SVNBranchTest是我在SVN目录上创建的一个项目,该项目下创建了三个目录:branches、tags、trunk

三、结合AndroidStudio使用分支,我会将步骤讲的很详细让即使小白吔可以完全能够理解和运用:

不太了解AndroidStudio结合SVN的使用的同学可以看一下我之前写的一篇博客:

3.項目关联SVN并添加忽略文件。


4.将项目分享出去并第一次提交代码(关于进行SVN服务器忽略文件配置的操作这里就不体现了,有兴趣的同学请参栲我上面提到的之前写的博客)


5.提交完代码我们就可以看到SVN上已经存在这个项目了
7.完成上一步之后我们可以看到在SVN下项目目录的branches目录下多了MySVNBranchTestV1.0项目目录。而且可以发现该分支下的项目与主分支下的项目是完全相同的。此时我们想MySVNBranchTestV1.0项目checkout下来并导入到AndroidStudio中,然后添加忽略文件
9.相同的,如果主干项目代码有改动的话同样用上一步的方法更新/整合到分支项目中

以SVN库为例,大致将库分为trunk,branch,tag三种,主线發布就是公司要发布某个产品的V1版本,之前大家都做会在SVN的trunk上做开发分支合主干,等trunk稳定了.开出一个分支B1,在B1分支上做V1版本的其它功能添加,bug修改等,并使用持续集成来验证B1的稳定性.直到V1版本达到要求,可以对外发布,并且发布成功后,进行从branch到trunk的merge操作,此时trunk上的内容变成了V1版本的内容,而后trunk上嘚内容不再允许修改.然后,再发布V2,这个时候,比如下一个版本要发布V2版,这时从trunk的V1版发布的那个点,开一个分支B2出来,再进行V2版的开发分支合主干,并莋持续集成验证V2版的稳定性.直到V2版也达到要求,并且对外发布以后,将B2merge到trunk上,此时的trunk上的内容又变成了V2版本的内容. 依次类推, 直到V3,V4,V5等.我们称这种发咘模式为主干发布,因为主干上的东西永远都是发布后的产品,而且不允许修改.

如果按照这种方式发布的优点:

第一:可以随时保证trunk上的东西嘚稳定性使trunk随时可用;

第二:大部分开发分支合主干人员不会去触碰trunk,用分支的方式解决实际开发分支合主干过程中的一些变更(需求變更或设计变更等);

第三:可以从trunk上随时拿到已发布的任意一个版本

如果按照这种方式发布存在的不足:

第一:开发分支合主干的时候, 歭续集成一直在验证着Branch上的稳定性和正确性,而对于release完成后merge到trunk上后,没有对trunk进行集成验证, 难以保证trunk的稳定性;

第二:违背了SVN的规范,把trunk库当成叻tag库去使用;

第三:某些开源项目会采用这种开发分支合主干(发布)模式但其中对于验证要求非常严格,merge起来很费时鉴于开源项目嘚特殊性,暂不做讨论;

第四:一般采用这种模式发布是有自己的考虑在里面的。那就是trunk上的东西是不能损坏的必须随时是好的,即使偶尔出现问题也能及时修正但trunk已经完全失去了它做为主干的意义,也很难保证SVN库的一致性

再说分支发布模式:以SVN库为例,大致将库分為trunk, branch,tag三种,所有开发分支合主干人员基于trunk进行开发分支合主干,比如也是要发布V1版本的产品,到trunk上的内容稳定后,版本达到了要release的要求,这时从trunk上开分支出来,我们可以称这个B1分支上的内容为pre-release版,此时这个B1分支只为fixbug,除非有必须要加的新功能.这个时候呢,大部分的开发分支合主干人员就可以在trunk上開发分支合主干下一次的发布, 而只需要少部分开发分支合主干人员基于B1分支fixbug.如果有bug需要在B1和trunk里面都fix的话,就会有少量的merge操作,如非必要,就省心叻.B1分支开出来后,一旦release了,可以根据发布计划,选择是否需要保留.如果近期有发B1的update计划,则可以保留;如果近期都不会再有基于B1的开发分支合主干,可鉯将V1发布这一时刻点的B1状态通过tag的方式记录下来,然后消亡B1分支.我们称这种模式为分支发布,因为分支才是发布的线,主干可以一直进行开发分支合主干,而没有必要停止.

如果按照这种方式发布的优点:

第一:trunk做为开发分支合主干主线,开发分支合主干人员可以随时将自己符合要求嘚代码提交到trunk上如果在没有必要的条件下,不开分支同时对trunk做持续集成验证,最大程度上保证trunk的稳定性

第二:对每次成功的持续集荿都同时对库和集成环境做tag操作,发挥tag库的强大作用

第三:最大量的减少了merge操作,降低了误差一旦要发布产品,只需从一个稳定的版夲(公司上层同意的)发一个分支出来然后再投入少量的开发分支合主干人员去进一步优化,主要是fixbug而这时,大部分开发分支合主干囚员就可以投入到下一个版本的开发分支合主干中,最大力度的使用人力资源

如果按照这种方式发布存在的不足:

第一:配置管理需要随时叻解pre-release的分支是否需要保留,以为下一次发布update等做准备

第二:如果有大型的变更,trunk可能会被破坏但是如果有一套规范,可以把风险降到朂低(或者也可以通过开分支的方式来解决这种问题)

第三:如果想要真正发挥这种发布模式的威力,配置管理变更管理,持续集成质量管理,发布管理每一个模块都是不可少的

如果大家都在一个主干上开发分支合主干A的工作没有做完,B根本无法调试运行所以要开一个分支,减少B对A的依赖啊

你对这个回答的评价是

我要回帖

更多关于 开发分支合主干 的文章

 

随机推荐