欢迎访问笔者个人技术博客:http://rukihuang.xyz/
一、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
- 版本号定义为三段数字编号 xxx.xxx.xxx
3.2.2 打分支或标记
3.2.3 主干与分支合并
- 需要保证主干是最新的,然后再
merge