使用SVN进行项目版本管理

1.摘要

本文描述了利用SVN进行项目版本管理的方法,涉及项目版本号命名规则、SVN目录结构、第三方代码库的管理、版本创建、发布、修订、合并等行为的方法和原则。

2.版本号命名规则

版本号采用主版本号.次版本号.修订号组成。版本的重大变化主版本号增1,次版本号和修订号归零。版本的相对较小的变化主版本号维持不变,次版本号增1,修订号归零。当一个版本发布后出现了bug需要修订,此时,主、次版本号不变,修订号增1。

注意:对于主动性的程序功能性的变化,应该增加主或次版本号,不应该通过修订号来反映。修订号只用于对已发布版本的bug修订,一个版本的修订号的大小某种程度上可以反映一个版本发布后的稳定情况。

3.SVN目录结构


项目结构

第三方库结构

以项目名称作为SVN仓库名称为项目创建独立的项目仓库。仓库主要结构分为branches和tags。branches为工作目录,tags为发布目录。项目使用到的第三方库独立出来单独组件项目仓库,为整个公司的所有项目所共享,仓库名称为vendor。

3.1项目结构

branches

分支,存放未发布版本。具体的某个版本存放在其下的一个以“RB-版本号”规则命名的文件夹。上图示例为当前存在两个正在开发的版本RB-2.0和RB3.0。分支是开发人员的工作目录,是版本实现过程中的中间成果,具有临时性。版本发布后,相应的分支即可销毁。

tags

标签,存放已发布版本。具体的某个版本存放在其下的一个以“REL-版本号”规则命名的文件夹。上图示例为当前存在两个已发布版本REL-1.0和REL-1.1。该目录只读,即不允许对任何已发布版本做任何修改。

版本内部结构

doc:文档存放目录

src:源码存放目录

bin:可执行文件、动态库、脚本、配置文件等发布项及pdb、mapfile、obj存放目录。

vendor

存放第三方库的变更记录文件change.xls。由于第三方库不常变动且库大,若与项目代码存放在一起,则签出代码量会过大,耗时长。因此项目内部仅存放一个变更记录文件。倘若出现第三库存在变更,例如,某项目从3.0开始,xerces库升级到2.8,则在change.xls文件中登记即可,change.xls结构如下表所示。


库名


库版本


项目版本


变更日期


备注


ace


4.5


1.0


2010-1-1


boost


1.39


1.0


2010-1-1


xerces


2.6


1.0


2010-1-1


xerces


2.8


3.0


2011-12-29

上表第4行表示在项目3.0时,xerces库从2.6升级到了2.8

3.2第三方库结构

第三方库单独成立SVN仓库,位置级别上升为与各项目平级,为公司内各项目所共享,其结构见上图。

4.常见操作

4.1新建版本

当确定需要建立一个版本时,则需要在branches下创建一个相应的版本分支,用于版本实现过程中的配置项管理。分支的创建可以从头创建也可以基于tags中的已发布版本创建。例如,要在REL-1.1的基础上开发2.0,则从tags\REL-1.1创建一个RB-2.0。

4.2日常工作

项目经理在给开发人员分派任务时必须制定版本号,即任务所属版本。开发人员根据任务的版本号属性在相应的工作分支中实现和提交工作成果物。这样,开发人员只需要知道任务所属版本号,无需关心版本之间的关系。项目经理需要对版本及其之间的关系有清晰的认识和规划。

4.3版本发布

当一个版本进入待发布状态后,需要为版本创建发布标签,即从版本分支创建一个版本标签。如2.0,则从branches\RB-2.0创建一个tags\REL-2.0。版本发布人员必须从tags下取发布项进行发布,杜绝发布人员从分支或者其他地方获取发布项进行发布。

4.4版本修订

当一个已发布版本出现bug需要修订时,需要从相应的已发布版本中创建一个分支版本。例如2.0发布后出现bug,则从tags\REL-2.0创建一个branches\RB-2.0.1。注意,修订号必须增加,版本不能回退也不能原地变化,即不管是新功能还是bug修订,只要是变更,版本号必增。带修订版本进入待发布状态后,则进入版本发布流程。

4.5版本合并

当多个版本处于并行工作状态下,例如RB-1.0.1(修复1.0发布后的bug)和RB-1.1(1.0发布后,在此基础上增加的新功能)两个版本并行工作,RB-1.0.1先于RB-1.1完成并发布, 那么RB-1.0.1发布后会创建REL-1.0.1,需要将REL-1.0.1的修改合并到RB-1.1,否则会出现1.0.1修改过的bug在新版本1.1中又重新出现了。

时间: 2024-08-04 22:25:26

使用SVN进行项目版本管理的相关文章

SVN更新项目&vs2015编译项目批处理文件

SVN更新项目批处理文件代码: 新建批处理文件(xxx.bat)内容如下: @echo off @echo 项目名称"svn运行目录" update "项目文件目录" --username svn帐号 --password svn密码pause 例: @echo off @echo XXXX"c:\Program Files (x86)\VisualSVN\bin\svn.exe" update "X:\X\X" --user

Work - SVN下载项目

SVN下载项目 本文地址:http://blog.csdn.net/caroline_wendy 使用SVN,在Git上下载项目. $ mkdir chunyu_trunk //创建文件夹 $ ls //查看列表 $ svn co https://dev.cxxxyx.mobi/svn/android/SxxxxRxxxDxxxx/branches/recode_60/ . //把路径文件checkout到当前文件夹, 最后一个点".",表示当前目录. //co表示checkout $

怎样使用svn开发项目

那么首先什么是svn呢?官方有很好的解释,我说一下个人简单的理解,svn就是开源的版本控制软件, 那么什么是版本呢?简单的说版本就是标记,比如你买了一本书,同样的书名,但是版本不一定一样, 因为里面可能补充了一点内容,为了区分,就修改了版本号,大家可以这么理解.要想使用svn软件首先就得 安装,在服务器安装svn软件,创建项目文件夹shop,然后(下面是本机安装svn的操作) 创建仓库 dos:> svnadmin create d:/svnServer/myapp/shop 里面会生成一些文件

Linux - SVN下载项目

SVN下载项目 本文地址:http://blog.csdn.net/caroline_wendy 使用SVN.在Git上下载项目. $ mkdir chunyu_trunk //创建目录 $ ls //查看列表 $ svn co https://dev.cxxxyx.mobi/svn/android/SxxxxRxxxDxxxx/branches/recode_60/ . //把路径文件checkout到当前目录, 最后一个点".".表示当前目录. //co表示checkout $ r

将svn的项目从一台服务器转移到另外一台服务器

前几天在做一个项目的时候,因为需要,需要将Server A 上SVN仓库 repos1中的项目pro1迁移到Server B 上的SVN仓库中,首先想到的是:通过复制,但是仔细一想,这样是不可能的:然后想到的是先把项目pro1 checkout到本地,然后再 将本地的项目 import 到 ServerB的svn仓库中,但这样一来,ServerB上的SVN仓库中 就好比完全是一个新的pro1项目了,也就失去了svn管理的意义了.下面有一种方法可以解决: (在进行下面的操作时,请注意备份仓库数据,

Android: 解决SVN更新项目后报错

解决SVN更新项目后报错 解决方法: 1.查看AndroidManifest.xml 和   project.properties文件是否配置正确,不正确 就修改适合当前开发环境的配置: 2.选择ADT的菜单项Project------------->clean  清理项目: 3.还不行的话,最后就重新打开ADT,基本上就解决了,再报错的话,那就是代码问题了,代码错误. PS: 项目不能生成R.java文件,Clean也不行的话,一定要看控制台输出的错误信息,根据错误信息去更改代码或文件,例如r

ZendStudio 解决svn导出项目乱码问题

从svn导出项目往往会出现乱码,可以右击项目,点击properties(或者选中项目alt+enter键进入)直接修改项目编码为utf-8,但是html文件还是乱码. 下面的方法可以解决: windows->preference->General->workplace,将右边的“text file encoding”修改为utf8格式 windows->preference->General->Editors->Text Editors->Spelling右

maven 从svn导入项目遇到的问题 No marketplace entries found to handle yuicompressor maven plugin:1.3.0:compile

RT,使用eclipse导入项目时 报 No marketplace entries found to handle yuicompressor maven plugin:1.3.0:compile in Eclipse. Please see Help for more information 我认为同事说的很对, eclipse是面向插件的,maven插件m2eclipse 的发展和maven不同步,m2eclips没有 yuicompressor maven plugin:1.3.0,所以

svn导出项目到myeclipse,运行报ClassNotFoundException

一开始以为是 这样的svn导出项目到myeclipse,运行报ClassNotFoundException 后来不行 又看了一下  还不行 以为是这样的MyEclipse2014报错java.lang.ClassNotFoundException 后来也不是 发现多了几个没用的jar包  删除之后就好了 迷之尴尬