SVN-高级应用使用指南
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文档规则
[本地工作区] :work copy,本地工作副本;
[主项目]:引用共用模块的新项目(工程)
最新版本(HEAD revision):版本库里文件或目录的最新版本
SA :SVN服务器的管理员
PRA :单个项目库的管理员,或者是项目负责人
User :普通工作人员
WC :work copy ,本地工作副本
一、模块化开发中svn的使用
主要介绍模块化开发中公用模块/组件的版本控制,介绍两种方法。其中,公用模块一般指那些已经完成的、不可修改的、无法编译成dll的、功能较为完整的代码群。
1.1手工维护公用模块/组件的[本地工作区]
将公用模块(的所需版本)直接取出ckeckout 到本地,公用模块的[本地工作区] 可以作为被引用的[主项目] [本地工作区] 的子目录也可以放在其他独立目录中。[主项目]的提交commit 对公用模块的[本地工作区] 不会发生任何影响,而且公用模块的[本地工作区] 需要项目团队中的每个成员与[主项目] [本地工作区] 相对独立的维护(取出ckeckout ),可能会出现不同项目成员之间的公用模块[本地工作区] 不一致的错误。
1.2 Svn自动维护公用模块/组件的[本地工作区]
需要使用svn:externals属性,具体操作步骤如下:察看[主项目] [本地工作区] 的目录属性
添加svn:externals 属性,格式:子目录名称-r版本号公用模块的URL。公用模块取出ckeckout出来的[本地工作区] 必须作为[主项目][本地工作区] 的子目录,格式中的“子目录名称”就是指公用模块的[本地工作区] 目录名称,注意不要与[主项目]自身的目录同名。如果需要使用公用模块的特殊版本,需要设置格式中的“版本号”,注意加上“-r”。设定好svn:externals属性后需要进行提交commit操作。项目团队的其他成员直接更新update即可,能够自动得到公用模块的[本地工作区]。[主项目]的提交commit对公用模块的[本地工作区] 不会发生任何影响。如果引用多个模块,只需要在设置该属性值的时候将多个模块的路径都填写上去即可。
注意:公用模块的[本地工作区] 一般不建议进行修改,即不要直接对公用模块的[本地工作区] 进行修改、提交commit 操作,建议管理员将公用模块的svn库的权限设置设定为只读权限。如果公用模块确实需要针对[主项目]进行个性化修改,这种情况的处理方法在此次讲座的后面将会谈到。
二、分支技术与产品化开发
2.1 tag/branch的作用和区别
分支:常用来测试新功能,但又不会因为编译错误或BUG干扰开发主线。
标记:用来对项目的特殊版本进行标记,通常不再用于开发。当然你也可以修改/tags/中的副本,但提交时SVN会有警告。例如当项目达到发行状态时可以创建一个发行版本的标记。
注意:/trunk /branches /tags 是SVN默认的主干/分支/标记目录的名称,SVN将对这三个目录有特殊的处理。
2.2推荐的版本库结构:
一个项目建立一个版本库,trunk目录来存放开发的“主线”,branches 目录来存放支线副本,tags目录来存放标签副本。具体结构如下Project_XXX
../trunk
../branches
../tags
●Trunk目录保存开发的“主线”,保存项目日常开发过程中代码和文档的
各个过程版本,一般建议Trunk目录下面至少包含两个目录:
Document、Source、Product,分别保存文档、程序源码、交付
用户的安装包及手册。
●branches目录来存放支线副本,建议branches目录下至少包含两
个目录:Alpha和Special,分别保存测试分支和定制化开发项目分
支。创建分支时分支的名称要尽量能够表明分支的用途,例如一个测试
分支名为FirstTest20070601,其目录为
Project_XXX/tags/Alpha/FirstTest20070601。使用支线的的常用模式
为:1、项目达到可测试状态准备交给测试团队进行测试,创建Trunk
的测试分支保存至Alpha目录下,测试团队从这个测试分支获取安装包
或者程序等进行测试;2、项目要根据另外一个新客户进行少量定制化
开发,为了避免干扰目前项目的开发,创建Trunk的定制化开发分支保
存至Special目录下。
●tags目录来存放标签副本,以方便查找某些重要项目版本。建议目录
下至少包含两个目录:Release和Other,分别保存产品发布标签和
其他标签。使用标签的常用模式为:1、当Alpha分支经过严格测试达
到发布标准后,将Alpha的最新版本做Tag保存在Release目录中;
2、重要里程碑阶段进行Tag保存在Other目录。
2.3如何做branch
2.3.1分支—>主干
实施团队开始为某个单位进行实施前,首先通过配置管理委员会的评审来建立相应实施模块的分支。需要对该单位实施多少个模块,就要针对多少个模块分别建立分支,分支的名称建议采用“项目名+时间”的形式,下图显示的为source 模块所建立的XXX厂的分支:
选择“切换工作拷贝到新分支/标记的选项”时,本地工作区将变成新建分支的副本。一般来说,这个分支是不是由实施团队建立的,操作人员没必要马上将自己的工作区变成分支的副本。需要变成分支副本时,可以还可以通过切换
Switch...命令完成转变工作。
切换Switch...操作时一定要注意目录的对应关系,即切换后目录的项目意义不能发生更改,在trun k主干上是class目录切换分支后不能是别的目录。进行改操作之前必须提交commit [本地工作区],并尽量在[本地工作区]的根目录上进行改操作。
2.4实施团队版本控制工作内容
2.4.1建立实施项目的版本库
参照“2.2 推荐的版本库结构”中介绍的方式组织版本库,经配置管理委员会评审并建立该实施项目的版本库。
2.4.2组织本地工作区
项目实施负责人首次取出checkout 新建分支后,按照Svn自动维护公用模块/组件的[本地工作区] 将soruce 目录的svn:externals属性进行设置,然后提交供实施团队中其他人员下载(取出checkout或者更新update)。
如果引用的模块(子系统)需要个性化修改,可以由配置管理委员会将该模