一、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 下载

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管理

  • 未经commitadd,项目不会上传至服务器

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

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

2.2.6 更新到历史版本

  1. 通过查看更新日志,在日志中选择要回滚的版本号

  1. 直接右键选择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

6

2.3.6 冲突解决

8

三、SVN规范

3.1 SVN目录规范

  • 在创建仓库时,可以选择目录结构,第二个选项

2

  • Trunk 主干目录,此目录下的文件为基准文件
  • Branches 用于开发的分支目录
  • Tags 用于发布的版本目录

3.2 分支与标记

3.2.1 分支和标记的规范

  • 分支的定义规则: Project name+日期时间+功能点
  • Tags的定义规则: Project name+版本号

    • 版本号定义为三段数字编号 xxx.xxx.xxx

      • 第一个:革命性的产品升级版
      • 第二个:新功能版
      • 第三个:修正bug

3.2.2 打分支或标记

3.2.3 主干与分支合并

  • 需要保证主干是最新的,然后再merge

6

7

Last modification:October 16th, 2019 at 08:16 pm