SVN版本管理
前言:
需求的软件: TortoiseSVN客户端Subclipse eclipse中的PlugIn Beyond Compare 3比较合并工具,安装插件后可以比较java的class文件
一、常用概念说明
以下概念如果有不清楚的,请上网问谷老师www.google.com.hk或360搜索。 版本管理目录结构类似如下图: 
- 主干(
trunk) - 分支(
branch) - 标签(
tag) - 切换(
switch):在主干,分支和标签间切换版本号,看起来是切换SVN的工作目录 - 合并(
merge) - 冲突(
conflict) - 检入(
check in) - 检出(
check out) - 导入(
import) - 导出(
export) - 工作副本(
working copy) - 还原(
revert) - 更新(
update) - 提交(
commit) revisionHead- 同步(
syschronize) - 资源库(
repository) - 锁
lock tag:存放每日下班前或上线之后的版本
如果有临时上线版本,则从tag目录总打出一个版本到branch
学习使用Beyond Compare
二、目录及使用说明
每个功能在SVN中已经创建好了主干(trunk),分支(branch),标签(tag),测试(test),生产(product)这三个的概念上面已经说明,主要说他们在本项目组的使用: 开发的阶段说明:需求分析,设计,开发,单元测试,集成测试,用户验收测试,上线,绿灯测试
- 主干
trunk:存放主要的开发版本,这版本是主线,大版本的开发都在这里进行。 - 分支
branch:存放临时的开发版本,原则上按每次紧急上线(或项目阶段)创建一个分支,也可根据情况创建分支,不同期的开发人员从不同分支上签出代码,开发,并提交;分支版本打标签后就进入标签目录中。UAT测试或某个合适的版本后后再合并到主干中,然后再把主干合并到后一个分支上。 - 标签
tag:一个特殊的分支branch,只用来存储已经开发完成某个版本分支或主干,是一个镜像存储。 只有配置管理员可以从标签目录中签出可以提交SIT,UAT测试的版本,标签目录中的版本是被认可的可以发布发测试或生产版本。开发人员对本目录无任何权限。 主干熟悉代码变更情况的开发人员一次导入即可。 分支由每期的开发组长或指定专人创建。 标签由各个开发组长根据开发情况从分支目录中打进标签目录。 -测试test:特殊的分支branch,存放测试版本,内容手工存入,从trunk或branch目录中拷贝而来 -生产product:特殊的分支branch,生产要上线的版本,从test目录中获取。
同期代码冲突:
为了避免在同一期(同一分支)项目中发生冲突,请一定保证修改代码前先update,或者直接锁定,但不要忘记解锁。建议开发时尽量拆分为多个文件(如多个XXXAction.java);如果不能拆分为多个文件,建议使用多个方法;如果不能多个方法,建议在修改或添加代码前后用以下注释包裹。 //开始作者 上线日期修改日期本次修改的功能描述
修改或添加的代码
//结束作者上线日期修改日期本次修改的功能描述
【示例如下】
// start 张三 2016033020130623为密码添加混淆器
// reqMap.put("Passwd", logonPwd);
reqMap.put("Passwd",new ObfuscatorUtil().plainTextToSecret(logonPwd));
// end 张三2016033020130623为密码添加混淆器多期代码冲突:
当多期代码(多个分支)同时开发时,文件冲突不可避免,需要由开发人员参与解决冲突并合并。可以采用TortoiseSVN自己的版本合并工具或BCompare4处理,建议使用后者,或者把BCompare4配置到SVN工具中管理。 标签tag与分支branch的区别: 分支与标签在技术实现上是一个意思;在本项目组管理上,标签是分支发布后的版本,开发人员把代码提交到分支上,配置管理员从分支上取代码打标签,然后测试打标签后的版本。开发人员继续在分支上开发。
2.3主干分支和标签的命名规范
主干名称:同项目名称如CubeGateway
分支名称:主干名称_B顺序数字如CubeCoreConsole_B1,CubeCoreConsole_B2
标签名称:主干名称_B顺序数字_TAGV+上线日期 如CubeCoreConsole_B1_TAGV20160316, CubeCoreConsole_B1_TAGV20160330, CubeCoreConsole_B2_TAGV20160316
三、本项目组中SVN客户端使用指南
以下的操作,我会交叉使用多种svn客户端演示,如TortoiseSVN,subclipse,各种客户端在图形界面使用上差不多。
3.1创建主干
借助于客户端工具,只要把项目导入(import)到TRUNK中即是创建主干,如下图 使用在eclipse中使用subclipse。
步骤一:在需要导入到SVN服务器中中需要进行版本控制的项目上右击鼠标.一次选择Team->Share Project,b并确定

步骤二:选择SVN


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

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

步骤五:写入注释

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

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

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

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

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

步骤三:输入项目名

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

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

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

3.3打标签
打标签和创建分支是同样的操作,代码被复制到标签目录下(TAG),只是打标签只能有开发组长或制定的专人处理,并且开发人员不能切换到标签目录(TAG)中。本目录只能由开发组长和配置管理员访问。
标签库中的版本是每次提交测试或提交生产的版本。
3.4合并分支
在本项目组内主要使用2种合并分支的方法:分支合并到主干和主干合并到分支。合并代码前必须代码已经提交了,如果有冲突,需要先解决冲突。
3.4.1分支合并到主干
步骤一:代码示例

步骤二:切换会主干

步骤三:选择项目的主干

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

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

步骤六:合并第一步

步骤七:下一步

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

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

步骤十一:提交代码,即合并完成。
3.4.2主干合并到分支
主干合并到分支是一个逆向的过程,主要流程类似,如果发生冲突,需要先解决冲突,如图
根据代码内容,解决冲突后,标识为已解决,则合并完成。
附录一、BCompare4 基本使用指南
1.取消时间比较,开启文件内容比较
2.取消不需要比较的文件和文件夹
3.比较后内容合并

