SVN版本控制注意事项

在学生时代,经常会有两三个人共同完成一个软件的开发,每个人都在修改、添加、删除着自己本地硬盘上的代码,当他们把这些代码汇总起来时,汇总的工作需要非常小心,这只是两三人的小团队。在小团队时我们用GIT或者SVN基础功能就可以帮助我们做好版本控制,还不需要使用分支创建和合并功能。在职场中,我们经常是一边开发一边发布,迭代会很频繁,经常会有新功能开发到一半,旧功能爆出Bug要修复。这时不得不先把手上的代码交给版本库,然后切换到旧分支加入Bug的修复工作。这里不可避免要遇到SVN和GIT的讨论,在职场上我其实比较推崇SVN,在学生时代讨论这个话题,总有些人会跳出来,说些特立独行地话,说什么SVN集中的版本控制就是扼杀优秀程序员之类地话。确实SVN版本控制每次提交都要担心Conflict,的确会影响效率,那为什么还要力挺SVN版本控制呢?


在从事PM工作的大半年时间里,SVN和GIT我都深度使用过,简单来说SVN更适用于项目管理,Git适用开源项目代码管理。前面说SVN每次提交都要检查Conflict,这恰可以保证代码永远可以追踪,有利于绩效考核,比如追踪某个Bug是怎么出现的(被谁以及什么时候引入进来的),同时代码安全上SVN也做得很好,SVN可以按个人进行针对某个子目录的权限控制。对每个人区分读、写权限。更严格的,不支持回退操作。相比之下Git没有严格的权限管理控制,只要有帐号,就可以导出、导入代码,甚至执行回退操作。


常规的SVN仓库目录结构下有3个文件夹:
trunk
tags
branches

其中,trunk(主干|主线) branchs(分支) tags(标记)。
trunk(主干|主线|主分支):是用来应对版本发布用,当模块开发完成后,再从branch合并到trunk。
branch(分支):分支开发和主线开发是可以同时进行的,但是不建议这样,分支是开发者的天地,trunk是PM的天地。
tag(标记):用于标记某个可用的版本,可以标记已经上线发布的版本,也可以标记正在测试的版本,通常是只读的。


注意:
1. 只能分支往主干靠拢(merge),不能反向!
2. 开分支负责新功能的开发,测试通过后PM负责merge到trunk中。
3. 分支负责修正当前发布版本的bug(对于可以放入下个发布版本的改进性bug可以直接在主干上开发)
4. 分支上修改的bug,经常性merge到主干上,尽量及时merge(避免大面积冲突)!
5. 直到下个新版本发布,该分支停止修改。

---------------------------------------------------------------------------------------------------------

 主干(trunk)
    |
    | --------------------->>>| 分支A -------V1.0发布----->  客
    |                                                       户
    | <<--merge--- | ---------| ---bug修正发布V1.0.1------>  部
    |                         |                             署
    |                         |                             环
    | <<--merge--- | ---------  ----bug修正发布V1.0.2----->  境
    |
    |
    |
    | --------------------->>>| 分支B -------新功能加入--->  内
    |                                                       测
    | <<--merge--- | ---------| ---新功能测试通过--------->  部
    |                         |                             署
    |                         |                             环
    | <<--merge--- | ---------| ---又一个新功能测试通过-----> 境        
    |                         |
    |                         |
    |                         |
    |(直至发布V2.0停止V1.0的修正,若V2.0上线遇到问题,快速回滚到V1.0最新修正版本)

---------------------------------------------------------------------------------------------------------

扩展:
使用SVN做Merge操作时,会包含6个选项,下面就这6个选项给出详细的说明:

1.Merge a range of revisions
此类型应用最为广泛,主要是把源分支中的修改合并到目标分支上来。

合并的源URL填写的是要合并的源分支的URL,待合并的版本范围如果为空,则指的是合并分支上所有的版本,即自从分支创建以来到分支当前最新版本的所有演变。
如果只是选择其中一个版本,那么表示只是选择那个版本的修改,之前或之后的修改将不被采纳。

2、Reintegrate a branch(回归融合)
可以理解为是第一种合并类型的一种特例,即把源分支上的修改直接覆盖目标分支上的相应文件。合并的结果将使得分支和主干一模一样,从而可以删除分支。
 
3、change-set based merge (需要下载Collabnet软件)

4. Merge two different trees
此类型与前两种类型不同,第一种类型可以选择源分支合并的版本,目标分支不能选择版本;
第二种类型是源分支和目标分支都不能选择合并的版本;而这种类型则是无论是源分支还是目标分支都可以选择合并的版本,
即可以选择过去的一个目标分支版本与源分支的某个版本进行合并。合并的时候以选择的源分支版本为主,
如果选择的目标分支版本与源分支版本有不同的地方,合并时目标分支部分将被放弃。

起始URL:选择目标分支目录的URL(应当和当前工作副本的URL一致,这个是所谓的合并点)

结束URL:选择要合并的源分支的URL。

起始和结束的版本:一般起始版本应当找到最后一次同步时的版本,如果从没有同步过(第一次合并),则选择创建分支时的版本,
结束版本一般是最新版本,如果你不想将某些内容合并进主干的话,也可以选择一个合并点。

5.Manually record merge information    (手工指定不需要合并的修改)

6.Manually remove merge information    (手工指定要合并的修改)

参考文献:https://blog.csdn.net/vbirdbest/article/details/51122637   

发布了105 篇原创文章 · 获赞 177 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/ai_64/article/details/104826005