Skip to content

SVN版本管理

前言:

需求的软件: TortoiseSVN客户端Subclipse eclipse中的PlugIn Beyond Compare 3比较合并工具,安装插件后可以比较java的class文件

一、常用概念说明

以下概念如果有不清楚的,请上网问谷老师www.google.com.hk或360搜索。 版本管理目录结构类似如下图: Alt

  • 主干(trunk
  • 分支(branch
  • 标签(tag
  • 切换(switch):在主干,分支和标签间切换版本号,看起来是切换SVN的工作目录
  • 合并(merge
  • 冲突(conflict
  • 检入(check in)
  • 检出(check out)
  • 导入(import)
  • 导出(export)
  • 工作副本(working copy)
  • 还原(revert)
  • 更新(update)
  • 提交(commit)
  • revision
  • Head
  • 同步(syschronize)
  • 资源库(repository)
  • lock
  • tag:存放每日下班前或上线之后的版本

如果有临时上线版本,则从tag目录总打出一个版本到branch

学习使用Beyond Compare

二、目录及使用说明

每个功能在SVN中已经创建好了主干(trunk),分支(branch),标签(tag),测试(test),生产(product)这三个的概念上面已经说明,主要说他们在本项目组的使用: 开发的阶段说明:需求分析,设计,开发,单元测试,集成测试,用户验收测试,上线,绿灯测试

  • 主干trunk:存放主要的开发版本,这版本是主线,大版本的开发都在这里进行。
  • 分支branch:存放临时的开发版本,原则上按每次紧急上线(或项目阶段)创建一个分支,也可根据情况创建分支,不同期的开发人员从不同分支上签出代码,开发,并提交;分支版本打标签后就进入标签目录中。UAT测试或某个合适的版本后后再合并到主干中,然后再把主干合并到后一个分支上。
  • 标签tag:一个特殊的分支branch,只用来存储已经开发完成某个版本分支或主干,是一个镜像存储。 只有配置管理员可以从标签目录中签出可以提交SIT,UAT测试的版本,标签目录中的版本是被认可的可以发布发测试或生产版本。开发人员对本目录无任何权限。 主干熟悉代码变更情况的开发人员一次导入即可。 分支由每期的开发组长或指定专人创建。 标签由各个开发组长根据开发情况从分支目录中打进标签目录。 -测试test:特殊的分支branch,存放测试版本,内容手工存入,从trunkbranch目录中拷贝而来 -生产product:特殊的分支branch,生产要上线的版本,从test目录中获取。

同期代码冲突:

为了避免在同一期(同一分支)项目中发生冲突,请一定保证修改代码前先update,或者直接锁定,但不要忘记解锁。建议开发时尽量拆分为多个文件(如多个XXXAction.java);如果不能拆分为多个文件,建议使用多个方法;如果不能多个方法,建议在修改或添加代码前后用以下注释包裹。 //开始作者 上线日期修改日期本次修改的功能描述

修改或添加的代码

//结束作者上线日期修改日期本次修改的功能描述

【示例如下】

java
// start 张三 2016033020130623为密码添加混淆器
 // reqMap.put("Passwd", logonPwd);
   reqMap.put("Passwd",new ObfuscatorUtil().plainTextToSecret(logonPwd));
// end 张三2016033020130623为密码添加混淆器

多期代码冲突:

当多期代码(多个分支)同时开发时,文件冲突不可避免,需要由开发人员参与解决冲突并合并。可以采用TortoiseSVN自己的版本合并工具或BCompare4处理,建议使用后者,或者把BCompare4配置到SVN工具中管理。 标签tag与分支branch的区别: 分支与标签在技术实现上是一个意思;在本项目组管理上,标签是分支发布后的版本,开发人员把代码提交到分支上,配置管理员从分支上取代码打标签,然后测试打标签后的版本。开发人员继续在分支上开发。

2.3主干分支和标签的命名规范

主干名称:同项目名称如CubeGatewayAlt 分支名称:主干名称_B顺序数字如CubeCoreConsole_B1,CubeCoreConsole_B2

标签名称:主干名称_B顺序数字_TAGV+上线日期CubeCoreConsole_B1_TAGV20160316, CubeCoreConsole_B1_TAGV20160330, CubeCoreConsole_B2_TAGV20160316

三、本项目组中SVN客户端使用指南

以下的操作,我会交叉使用多种svn客户端演示,如TortoiseSVNsubclipse,各种客户端在图形界面使用上差不多。

3.1创建主干

借助于客户端工具,只要把项目导入(import)到TRUNK中即是创建主干,如下图 使用在eclipse中使用subclipse

步骤一:在需要导入到SVN服务器中中需要进行版本控制的项目上右击鼠标.一次选择Team->Share Project,b并确定

Alt

步骤二:选择SVN

AltAlt

步骤三:制定项目的主干目录

Alt

步骤四:项目名会自动添加到主干目录的最后,检查无误后,进入下一步

Alt

步骤五:写入注释

Alt

步骤六:上一步完成后会自动打开eclipse的团队同步透视图(Team Synchronizing):

Alt

步骤七:选择需要加入到SVN服务器的文件。

Alt

步骤八:注意文件的图片上都加入一小黄色圆柱体,标识已经加入版本控制,并且是已经与资源库中同步的。至此,我们已经创建了项目的主干,即在TRUNK中导入了项目。

Alt

3.2创建分支

步骤一:在项目上右击,选择Team->分支/标记...

Alt

步骤二:在资源库到URL后面的“浏览”按钮上单击,选择分支目录(BRANCH目录)

Alt

步骤三:输入项目名

Alt

步骤四:选择最新版本(HEAD 修订版)或指定资源库中的修订版,指定版本号

Alt

步骤五:完成,注意如果是开发组长最好复选“切换工作副本为新的分支/标记”,即可直接在分支中进行操作了。当然也可以不选择,等后面再做切换。

Alt

步骤六:注意项目在SVN中的目录的变化

Alt

3.3打标签

打标签和创建分支是同样的操作,代码被复制到标签目录下(TAG),只是打标签只能有开发组长或制定的专人处理,并且开发人员不能切换到标签目录(TAG)中。本目录只能由开发组长和配置管理员访问。 Alt 标签库中的版本是每次提交测试或提交生产的版本。

3.4合并分支

在本项目组内主要使用2种合并分支的方法:分支合并到主干和主干合并到分支。合并代码前必须代码已经提交了,如果有冲突,需要先解决冲突。

3.4.1分支合并到主干

步骤一:代码示例

Alt

步骤二:切换会主干

Alt

步骤三:选择项目的主干

Alt

步骤四:切换回主干,代码和项目目录显示如下:

Alt

步骤五:合并,选择要合并的文件,Team->合并

Alt

步骤六:合并第一步

Alt

步骤七:下一步

Alt

步骤八:选择要合并的版本,然后继续下一步,最给出合并的提示信息,如下

Alt

步骤十:主干合并分支完成,主干中有了分支中的代码。

Alt

步骤十一:提交代码,即合并完成。

3.4.2主干合并到分支

主干合并到分支是一个逆向的过程,主要流程类似,如果发生冲突,需要先解决冲突,如图 Alt 根据代码内容,解决冲突后,标识为已解决,则合并完成。

附录一、BCompare4 基本使用指南

1.取消时间比较,开启文件内容比较 Alt 2.取消不需要比较的文件和文件夹 Alt 3.比较后内容合并

Alt

基于MIT协议发布.