Subversion管理规范
一Subversion介绍
Subversion (Subversion)是一个时间机器,随时记录文件和目录的每次改动,例如:文件的增加、删除、重新排列文件等。
同时SUBVERSION允许你恢复以前旧版本的数据,或者检查数据变化的历史。
SVN使用类似数据库事物的方式来处理用户提交入库的过程,整个改动要么成功的被提交,要么被中断并回滚。
在数据提交完之前,其他人是看不到用户提交的修改文件,你看到的要么是改动之前的状态,要么是改动之后的状态。
这样的行为被称为“原子提交”。
原子提交很有用,因为它能保证所有相关人员看到的总是相同的东西。
原子提交过程的其中一步就是包括把你的所有改动打包为
一个“修订集”(有时被称为改动集),并且再给个改动标记的修订号(绿色勾变为红色叹号)。
图 1
图1总体概括了SVN 整个操作过程:首先用户从版本库通过网络“检出”到本地工作副本中,然后,在本地工作副本中进行增加、修改、删除文件后“提交”到版本库中,如果本地工作副本中版本较系统版本过时,用户使用“更新”功能与系统上版本保持一致。
二 Subversion 的目录结构
每个SVN 版本库下需要有trunk(可用项目名做目录名)、branches 及tags 目录,trunk 表示开发时版本存放的目录,即在开发阶段的代码都提交到该目录上。
branches 表示发布的版本存放的目录,即项目上线时发布的稳定版本存放在该目录中。
tags 表示保存测试无问题的发布版本,不可修改。
branches/tags 命名规则:项目名[_说明]_版本号。
在这需要说明下分三个目录的原因,如果项目分为一期、二期、三期等,那么一期上线时的稳定版本就应该在一期完成时将代码copy 到branches 上,这样二期开发的代码就对一期的代码没有影响,如新增的模块就不会部署到生产环境上。
而branches 上的稳定的版本就是发布到生产环境上的代码,如果用户使用的过程中发现有bug ,则只要在branches 上修改该bug ,修改完bug 后再编译branches 上最新的代码发布到生产环境即可。
tags 的作用是将在branches 上修改的bug 的代码合并到trank 上时创建个版本标识,以后branches 上修改的bug 代码再合并到trunk 上时就从tags 的version 到branches ,最新的version 合并到trunk ,以保证前期修改的bug 代码不会在合并。
版本库 本地工作副本
三说明注释
对SVN的日常文件更新一律按照“检出---提交”的方法,用户需要在本地建立工作副本,每次在本地修改后提交到SVN服务器上,不允许直接将文件拖拽到服务器上。
用户在提交日常文件成功后,系统会自动精确到秒的记录用户所有操作。
因此,用户在日志备注中应注明提交原因和较详细的描述修改的地方,以便日后整理补丁回滚版本所需。
日常更新的文件、数据不能设置密码;文件、数据不允许重复放置。
如下所示:
+) 表示增加了功能
*) 表示对某些功能进行了更改
-) 表示删除了文件,或者对某些功能进行了裁剪,删除,屏蔽。
b) 表示修正了具体的某个bug
四提交规则
提交之前先跟新
在更新时注意所更新文件的列表,如果提交过程中产生了更新,则也是需要重新编译并且完成自己的一些必要测试,再进行提交。
这样既能了解别人修改了哪些文件,同时也能避免SVN合并错误导致代码有错。
如果在修改的期间别人也更改了svn的对应文件,那么commit就可能会失败。
如果别人和自己更改的是同一个文件,那么update时会自动进行合并,如果修改的是同一行,那么合并时会产生冲突,这种情况就需要同之前的开发人员联系,两个人一起协商解决冲突,解决冲突之后,需要两人一起测试保证解决冲突之后,程序不会影响其他功能。
负责谨慎的提交自己的代码
当某一模块功能完成后,并测试无问题,谨慎地提交。
如果提交过程中产生了冲突,则需要同之前的开发人员联系,两个人一起协商解决冲突,解决冲突之后,需要两人一起测试保证解决冲突之后,程序不会影响其他功能。
如果提交过程中产生了更新,则也是需要重新编译并且完成自己的一些必要测试,再进行提交。
不要提交自动生成的文件
MyEclipse会在build、.setting和根目录下生成大量编译及工作空间信息文件,不要把这些文件提交。
尽量做到每次提交选择确认提交的文件提交,而非点击根目录提交,并把所有文件勾选上。
不要提交不能通过编译的代码
代码在提交之前,首先要确认自己能够在本地编译。
如果在代码中使用了第三方类库,要考虑到项目组成员中有些成员可能没有安装相应的第三方类库或者没有放入jre的ext中,项目人员在准备项目工作区域的时候,需要考虑到这样的情况,确保开发小组成员在签出代码之后能够在统一的环境中进行编译。
不要提交自己不明白的代码和文件
代码在提交入SVN之后,你的代码将被项目成员所分享。
如果提交了你不明白的代码,你看不懂,别人也看不懂,如果在以后出现了问题将会成为项目质量的隐患。
因此在引入任何第三方代码之前,确保你对这个代码有一个很清晰的了解,同样的,不清楚的文件也不要提交。
永远不要用外部文件覆盖版本库文件
当外部文件覆盖版本库同名文件时,SVN执行的是先删除后添加的操作,两个同名文件并不会享有相同的历史,如果上个文件有所更改,将不会在新文件上表示出来,使得更改丢失。