文章目录
SVN概述
SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。 [1]
怎样让系统允许用户共享信息,而不会让他们因意外而互相干扰?
方案一:复制-修改-合并方案(Subversion默认的模式)。在这种模型里,每一个客户读取项目配置库建立一个私有工作副本——版本库中文件和目录的本地映射。用户并行工作,修改各自的工作副本,最终,各个私有的复制合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。
方案二:锁定-修改-解锁方案。在这样的模型里,在一个时间段里配置库的一个文件只允许被一个人修改。此模式不适合软件开发这种工作。
SVN架构
Subversion支持Linux和Windows,更多是安装在Linux下。
svn服务器有2种运行方式:独立服务器和借助apache运行。两种方式各有利弊,用户可以自行选择。
svn存储版本数据也有2种方式:BDB
,事务安全型表类型;FSFS
,一种不需要数据库的存储系统。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。
SVN使用
下载
常用的SVN工具有:windows环境下的服务器软件VisualSVN,客户端软件TortuiseSVN,IDEA集成svn插件将在后面介绍。
VisualSVN和TortoiseSVN的安装包:点击传送
安装
安装VisualSVN的时候注意选择仓库的位置(自定义仓库位置):
安装结束后注意开启VisualSVN的服务。
VisualSVN创建仓库
(1)选择FSFS
类型的仓库
(2)输入仓库名【bos】完成创建
VisualSVN权限控制
创建用户时要求输入用户名和密码,往组中添加用户,以方便管理。
在仓库右键选择【Properties】可以对仓库的访问权限进行设置。
TortoiseSVN常用操作
右键功能介绍
浏览仓库
正常情况下,在浏览仓库时会要求录入username与password 我们可以清空svn客户端的缓存。设置方法如图。
浏览仓库:打开【TortoiseSVN】>【右键点击仓库】>【copy URL to ClipBoard】>【通过浏览器打开可以看见仓库】
checkout
在任意一个目录内右键选择【SVN Checkout】,然后下载仓库内容
add
将要提交的文件添加到暂存区(?git中是这个说法,svn中求告知)。
选择【add】后,文件上会出现一个【+】。
commit
在【bos】目录内右键【SVN Commit】可以提交更改到仓库中去。
update
将仓库最新版本更新到本地。
回退到历史版本
(1)回退到上一个版本
(2)回退到指定版本
delete
将【文件】/【目录】删除,下一步需要【commit】,才能从仓库中删除。
导入与导出
Export
将仓库内容导出到目录中。导出的内容不包括【.svn目录】。
Import
将本地资源导入到svn服务器。
冲突问题与解决
问题
目录【aaa】和【bbb】都关联的【bos】仓库,二者都保持最新版本(目录内容完全一致)。
在【aaa】的【readme.txt】中添加内容:aaa
,然后执行【commit】
在【bbb】目录不执行【SVN update】,然后直接在【readme.txt】中添加内容:bbb
,然后执行【commit】,报错。
问题解决
在上述问题产生后,点击【ok】后弹出下面的窗口。
这个窗口给了我们两个选择:【update】和【cancel】。
(1)选择【update】,现执行【SVN update】,然后执行【commit】。
(2)选择【cancel】,则选择了手动解决冲突,会弹出下面窗口。
弹出窗口后,会产生三个文件,下面是文件的说明。
readme.txt 它是服务器上的文件与本地文件合并
readme.txt.mine 本地修改后的文件
readme.txt.r9 修改前的文件
readme.txt.r10 对方修改后的文件
下面来解决冲突
(1)选择【Edit conflicts】
(2)调整代码顺序,选择需要的代码
(3)调整结束
(4)保存退出,然后重新执行【commit】,就解决了冲突。
SVN规范
在VisualSVN中创建仓库时,可以选择svn目录结构,如下图所示。
- Trunk 主干目录,此目录下的文件为基准文件
- Branches 用于开发的分支目录
- Tags 用于发布的版本目录
tags使用场景:
假设有一个项目OA,我们完成了1.0版本,这时就可以打一个tags。
branches使用场景:
后续我们在OA项目上添加一个新的模块(及时通讯),我们就可以开一个分支,又有一个公司需要在我们OA基础上添加财务管理模块,我们又可以打一个分支。我们后续针对OA的1.0版本在升级,我们不需要原来附加功能,就可以在原来的主干上继续开发,形成OA2.0版本,开发完成后就可以在打一个tags。
分支与标记
分支或标记规范
分支的定义规则:Project name+日期时间+功能点
Tags的定义规则Project name+版本号
版本号定义为三段数字。编号xxx.xxx.xxx 第一个:革命性的产品升级版,第二个:新功能版,第三个:修正bug。
打分支或标记
准备一个带【svn目录结构】的仓库【demo】,向【trunk】导入一些内容。
准备两个文件夹,一个命名【分支】,一个命名【主干】,然后从【demo > trunk】执行【checkout】到【主干】。
在【主干】文件夹内右键点击【branch/tag】,然后选择分支。
成功打了一个分支后,可以看见
分支合并到主干
从【demo > branches】执行【checkout】到【分支】。
注意,此时【分支】和【主干】内容完全一致。
打开【分支】,修改代码,然后执行【commit】,这时,【分支】和【主干】不一致了。
切换到【主干】,右键【TortoiseSVN】> 【Merge…】,然后进行下面的操作,最后再执行【commit】,可以看见代码已经变成合并后的样子了。