很多情况下我们使用SVN只是把它当作了一个备份工具或者文件代码仓库,在需要的时候将开发好的代码或者文件上传一次,以保证其不丢失,然而SVN的功能不仅仅是这些,SVN除了版本控制以外,最大的作用是多人协同开发同一个项目。

SVN的三个目录

标准SVN有三个目录,而所有的操作也是围绕着这三个目录进行的,理解了这三个目录的作用,也就了解了SVN的工作方式。
我们已Coding为例,新建一个标准的SVN仓库后,会出现三个目录:

image.png

  • Trunk:主干,主线开发目录,也就是主线开发过程中所有的代码等都存放在这个目录下。
  • Branches:分支,一般用在Bug修复、新特性开发时,从主干切换到分支目录下。
  • Tags:标签,主干存档用,也就是发布的版本,或者测试没有问题的版本。

    集中式开发过程

    我们以一个嵌入式软件开发项目为例,当硬件完成后准备开始软件开发,软件开发小组有两个人A和B组成,程序员A创建了基于硬件的程序框架比如基于FreeRTOS的程序框架,确保能在硬件跑起来后,提交第一个主干版本Version N,此时代码在Trunk目录下。程序员B从主干版本中切出一个分支Version 0(代码位于Branches目录下),与程序员A同时并行开发不同的任务,程序员A开发完成,提交版本Version N+1,测试没问题后,冻结代码并Tag A(代码位于Tags目录下),程序员B开发分支Version 1完成,和版本Version N+1合并到主干,形成Version N+2。
    之后程序员A可以在主干上继续开发新的特性,如果这时候发现Tag A存在一个Bug需要修复,从Tags目录下切出一个分支,修复完Bug后,可以直接再打个tags,或者合并到主干,等待下次与主干功能一起打tags。
    SVN开发模式-集中式 - 图2

    关于测试

    代码开发过程其实很好管控,但是如何和测试结合呢?一般情况下我们开发完成代码后,自检代码没有问题,直接打一个Tags,此时测试人员从Tags中取代码,而不是从Trunk中取,开发人员继续主干代码开发,测试人员测试完Tags的代码后,提交Bug给开发人员,开发人员从Tag中切除分支,并修改Bug,修复完成后,可以在原来的版本上再次打Tags,也可以直接合并到主干,等待下次打Tag,却决于这个Bug的类型。

    其他

    SVN开发模式-集中式 - 图3
    SVN的开发方式有很多,多人多模块开发时适合用这种代码管理工具比如SVN或者Git,能够有效的管理代码,协同开发,不同的开发团队要摸索出适合自己的开发方式,高效、便捷是我们使用SVN或者Git最终的目的。