1、SVN基本介绍
1.1、什么是SVN?
SVN是Subversion的简称,是一个自由开源的版本控制系统。
Subversion将文件存放在中心版本库里,这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况,这样就可以借此将数据恢复到以前的版本,并可以查看数据的更改细节。
简单来说,SVN就是一个帮助我们管理项目版本的工具。在实际开发中,多个开发者开发自己负责的模块代码,那么如何将这些模块代码整合在同一个项目中呢?如何仅仅是复制粘贴话,虽然可以达到整合效果,但是效率低下,且无法版本回调,即无法重现历史版本的代码。
但SVN解决了这些问题,它只需要开发者向SVN服务器提交自己的代码,由SVN来整合管理。又因为SVN是通过版本来管理代码的,所以不管提交多少次代码,依旧可以重现历史代码。
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就郁闷了。
下图就是标准的集中式版本控制工具管理方式:
集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。但是相较于Git而言,集中式版本控制工具缺点很明显:服务器单点故障和容错性差。
1.2、SVN架构
Subversion支持Linux和Windows,更多是安装在Linux下。
SVN服务器有2种运行方式:独立服务器和借助apache运行。两种方式各有利弊,用户可以自行选择。
SVN存储版本数据也有2种方式:BDB一种事务安全型表类型和FSFS一种不需要数据库的存储系统。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。
2、SVN使用
主要介绍常用的SVN工具,如Window下SVN服务器VisualSVN,客户端工具TortoiseSVN以及IDEA SVN插件的使用。
SVN是一种集中式管理代码的版本控制系统,原理就是把代码都保存到一个固定的位置(仓库),每次从这个位置拷贝更新代码,进行编辑;再把修改后的代码提交到该目录中。多人协作开发也是如此。因此需要一个类似Oracle或者MySQL的服务器用于保存和管理库文件(要保存的代码等文件)的服务端(VisualSVN Server)。还需要一个用户的操作端,用于提交更新检出代码,常用的有idea的SVN插件,以及TortoiseSVN。
SubVersion 官网:http://subversion.apache.org
2.1、服务器端VisualSVN安装配置
2.1.1、VisualSVN下载安装
2.1.2、VisualSVN创建工程目录
2.1.3、VisualSVN权限控制
(1)创建用户
(2)创建组
组的概念就是把相同权限的用户放到一个组里进行管理。
(3)分配权限
2.2、客户端TortoiseSVN安装与使用
TortoiseSVN是一个基于Windows系统的SVN客户端图形化界面。
2.2.1、TortoiseSVN下载与安装
安装后根据需要可以自己选择是否重启下电脑,加载客户端TortoiseSVN的一些小图标。
2.2.2、TortoiseSVN常用的操作
(1)浏览仓库
正常情况下,在浏览仓库时会要求录入username与password认真信息,当然可以清除SVN客户端的认证信息。
(2)checkout:导出SVN服务器上的项目
(3)add:将文件添加到SVN客户端进行管理
(4)commit:将SVN客户端中管理的文件上传到仓库中
commit之前一定要先将文件进行add操作。
(5)update:更新操作,将SVN服务器上的内容更新到本地
(6)更新到某个历史版本
(7)delete:删除本地项目文件,若delete后使用commit,则仓库中此文件也被删除
(8)import导入与export导出
import将本地资源导入到SVN服务器中。
export将SVN服务器中的项目导出到本地,和checkout区别在于不存在.svn隐藏文件,因此不收SVN版本控制。
(9)解决冲突问题
多个用户同时操作同一个文件时,就可能产生冲突情况。简单来说,就是当某一用户提交一个版本为5的代码时,但服务器此代码的版本已经到6以上了,就会出现冲突。
这个冲突产生后如何解决,我们可以采用手动Merge,解决冲突后,重新commit。
解决冲突过程演示:
如何避免冲突出现?建议在对文件代码进行编辑之前,先使用update对文件的版本进行更新后再去编辑文件,这样可以避免出现冲突。
2.3、IDEA中如何使用SVN
2.3.1、IDEA下配置SVN
前提是已经安装了TortoiseSVN,且安装command line client tools组件。
2.3.2、IDEA中SVN常用的操作
①Update Project 更新项目。
②Commit changes 提交项目上所有变化文件。
③Show history 显示当前文件的历史记录。
④Revert 还原当前被修改的文件到违背修改的版本状态下。
①Local Changes 本地修改过的文件都会出现在这里。
②Repository svn仓库所有提交记录。
③Incoming 本地还没有更新的别人提交的代码。
(1)share project:将项目上传至SVN服务器仓库中
注意,通过share project上传SVN服务器端仓库中,只有一个空的项目文件。若想将项目中的代码及文件上传SVN服务器端仓库中,则接着使用commit操作即可。
(2)add commit update:对本地的代码进行提交,以及将仓库中的代码更新到本地
(3)checkout:将SVN服务器端中的项目导入到IDEA中
(4)解决冲突
在使用TortoiseSVN客户端时已经讲解过如何去解决冲突,接下来讲解在IDEA中如何解决SVN的冲突。
3、SVN规范
3.1、SVN目录规范
在visualSVN中创建仓库时,可以选择SVN目录结构。
假设有一个项目OA,我们完成了1.0版本,这时就可以打一个tags。后续我们在OA项目上添加一个新的模块,我们就可以开一个分支,又有一个公司需要在我们OA基础上添加财务管理模块,我们又可以打一个分支。
我们后续针对OA的1.0版本在升级,我们不需要原来附加功能,就可以在原来的主干上继续开发,形成OA2.0版本,开发完成后就可以在打一个tags。
3.2、分支与标记
3.2.1、分支与标记的规范
分支的定义规则:Project name+日期时间+功能点
Tags的定义规则:Project name+版本号 版本号定义为三段数字。编号 xxx.xxx.xxx 第一个表示革命性的产品升级版,第二个表示新功能版,第三个表示修正bug小版本。
Tags一般是只读,它代表的是发布的版本,所以我们不要进行改变。
3.2.2、如何打分支或标记
准备Trunk主干:
打个Branches分支,Tags同理:
3.3、主干与分支或标记的合并
首先保证主干是最新的(先update),在分支这边进行操作。