一、背景

        虽然现在很多公司都使用Git作为版本控制工具使用,但是svn仍然在很多公司中被广泛使用,尤其在一些规模不大的公司中使用得更广。


二、SVN


        SVN的全称是subversion,是一个开源的版本控制系统。对一般的用户而言,SVN本身没有太多的技术含量。但是,作为一个软件而言,还是有很多的技巧值得好好研究的。本文的目的不在于如何“高技巧”的使用svn,而是如何规范的使用svn,进而提高我们的代码质量,减少人力成本。当然,本文的目的纯粹是作为自己的应用笔记,方便自己日后好查阅相关的知识。文中的错误以及不当之处必然存在,欢迎大家指正,感激不尽!



三、规范化提交代码

     3.1、svn日志描述


        在我们的代码完成一个任务并且测试没有问题之后,应该尽快将代码提交到svn版本库中,而在提交的时候svn工具会提示我们输入日志。日志当然可以随便输入,但是我们要说的是如何规范日志的写法。这一点很重要,因为日后的开发过程中不免要回头看看上一个版本中我们修改了哪些内容。也许前面一两个版本的内容开发人员会记得比较清楚,但是再往前便不一定了。所以,在每次上传代码到svn版本库的时候一定要详细的记录本次修改了哪些内容,这就体现在日志如何填写了。根据我个人的总结,以及参考其他人的写法,得到了一个简介的日志模板:


/*****************************************************************Start:SVN日志模板*****************************************************************************/


【提交类型】: Bug修复/阶段性提交/追加递交/新功能/需求修改/解决编译不过/代码整理/初次提交
【问题描述】: 


                             1、添加了xxx功能;



                             2、解决了xxx导致的xxx问题;



                             ......


                             1、xxx.h文件中添加/修改了xxx;


                             2、xxx.hc文件中添加/修改了xxx;


                             ......
【相关单号】: Bug号/库版本号/......
【评  审  人】: xxx
【需要测试】: 是/否


/*****************************************************************End:SVN日志模板******************************************************************************/



举个例子,假如说本次代码时第一次上传svn,那我们在填写日志时可以这样填写:


【提交类型】: 初次提交
【问题描述】: 初次提交DIL模块代码
【修改内容】: 所有代码均为初次提交
【相关单号】: DIL库版本号1.00.000
【评  审  人】: 张三
【需要测试】: 否



     3.2、svn日志模板化


        svn工具提供了方便的日志模板管理,我们可以在使用之前将模板加入svn的属性中,然后填入模板,这样每次提交代码的时候便不用手动输入模板,而且不容易产生手动输入的错误。以TortoiseSVN为例,此操作的步骤如下。


        (1)、在本地svn目录下,右键选择TortoiseSVN->Properties,如下图所示:


                     




        (2)、在弹出的窗口中,点击New,选择Other,如下图所示:




        (3)、在弹出的窗口中,点击下拉款,选择tsvn:logtemplate,在Property value窗口中填入模板即可。如下图所示:





四、规范化使用svn版本库目录:


        svn目录创建以后,一般会产生三个目录:branches、tags、trunk。一般表示的意思为trunk为主开发目录,branches表示分支开发目录,tags表示存档目录(tags目录不允许修改)。正常情况下,没有明文规定这三个目录应该怎么使用。但是,业界也有个隐含的规范,很多大公司也是按照这个规范来进行项目开发。如下:


        (1)、正常情况下,都在trunk目录下开发。比如,开发某个项目的1.0版本;


        (2)、1.0版本的代码已经完成,且测试通过,可以正式对外发布release版本。这时候就应该将现在处于trunk目录下的版本打个标签到tags目录下面进行存档;


        (3)、开始开发2.0版本,在trunk目录下开发;  


        (4)、此时,发现1.0版本的代码中存在某个Bug。此时需要修改1.0的版本,将tags目录下的1.0版本branch到branches目录下进行Bug修复;    


        (5)、1.0版本的Bug已经修复,且测试通过,可以发布1.0_bugfix的release版本。此时可以根据需要选择性的将1.0_bugfix版本merge回trunk;



五、参考文献:


        (1)、 Draco Tianlong的“【SVN】SVN设置日志提交限制和日志模板设置(windows下)”

        (2)、 JStar的“关于SVN”目录结构