一、SVN介绍
- SVN是Subversion的简称,是一个自由开源的版本控制系统。
- Subversion将文件存放在中心版本库里,这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况,这样就可以借此将数据恢复到以前的版本,并可以查看数据的更改细节
- 早期版本控制使用的是CVS,后来SVN替代了CVS,随着android兴起,出现Git版本控制工具。
1.1 SVN基本概念

1.1.1 两种共享方案
- 复制-修改-合并(默认):在这种模型里,每一个客户读取项目配置库建立一个私有工作副本——版本库中文件和目录的本地映射。用户并行工作,修改各自的工作副本,最终,各个私有的复制合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。
- 锁定-修改-解锁:在这样的模型里,在一个时间段里配置库的一个文件只允许被一个人修改。 此模式不适合软件开发这种工作。
1.2 SVN架构

二、SVN的使用
2.1 VisualSVN
2.1.1 下载
- SubVersion 官网:http://subversion.apache.org/

2.1.2 安装与创建仓库
- 注意路径和安装选项


- 在开始菜单中找到VisualSVN Server Manager就可以打开图形化界面

2.1.3 创建工程项目
- 右键
repository->create new repository,即可创建工程目录

2.1.4 权限控制
- 右键
user->create user,即可创建用户


- 右键
group->create new group,即可创建组,并可在该组下添加用户


- 右键仓库 ->
properties,可谓该仓库添加用户,并分配权限

2.2 TortoiseSVN
- TortoiseSVN是一个基于windows系统的svn客户端图形化界面.
2.2.1 Repo-browser 浏览仓库
- 正常情况下,浏览仓库需要输入用户名和密码。



2.2.2 checkout 第一次将项目从服务器下载到本地仓库
- 第一次下载叫
checkout,之后就是update

2.2.3 add 添加到本地仓库,交由SVN管理
- 未经
commit的add,项目不会上传至服务器

2.2.4 commit 将项目上传至服务器中的仓库



2.2.5 update 将服务器中的内容更新到本地

2.2.6 更新到历史版本
- 通过查看更新日志,在日志中选择要回滚的版本号


- 直接右键选择
update to revision


2.2.7 delete 标记删除
- 标记删除后,只是在本地进行删除,
commit后才能在服务器中的仓库进行删除

2.2.8 导入与导出
import:将本地资源导入到svn服务器export:和checkout区别是,不存在.svn文件
2.2.9 冲突问题与解决
- 当多个用户操作相同的文件,其中有人没有
update直接commit后,其余人进行操作会出现冲突。

- 手动
Merge,然后重新commit

HelloWorld.java它是服务器上的文件与本地文件合并HelloWorld.java.mine本地修改后的文件HelloWorld.java.r4修改前的文件HelloWorld.java.r5对方修改后的文件

2.3 IDEA下SVN配置与使用
2.3.1 配置
- 前提是已经安装了TortoiseSVN,在IDEA -> settings中进行配置

2.3.2 share project

2.3.3 checkout

2.3.4 add commit update

2.3.5 ignore


2.3.6 冲突解决


三、SVN规范
3.1 SVN目录规范
- 在创建仓库时,可以选择目录结构,第二个选项


Trunk主干目录,此目录下的文件为基准文件Branches用于开发的分支目录Tags用于发布的版本目录
3.2 分支与标记
3.2.1 分支和标记的规范
- 分支的定义规则:
Project name+日期时间+功能点 Tags的定义规则:
Project name+版本号版本号定义为三段数字编号 xxx.xxx.xxx
- 第一个:革命性的产品升级版
- 第二个:新功能版
- 第三个:修正bug
3.2.2 打分支或标记


3.2.3 主干与分支合并
- 需要保证主干是最新的,然后再
merge


