一、SVN的概述
1、什么是SVN
Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。
SVN相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。
2、SVN的作用
(1)如果没有SVN 团队开发会出现什么样的问题?
通常软件开发由多人协作开发,如果对代码文件、配置文件、文档等没有进行版本控制,将会 出现很多问题:
- 代码管理混乱
- 备份多个版本,占用磁盘空间大
- 解决代码冲突困难
- 容易引发BUG
- 难于追溯问题代码的修改人和修改时间
- 难于恢复至以前正确版本
- 无法进行权限控制
- 项目版本发布困难
使用SVN以后以上的问题都可以被解决了。
(2)SVN 的主要功能
-
目录版本控制
CVS 只能跟踪单个文件的历史, 不过 Subversion 实作了一个 “虚拟” 的版本控管文件系统, 能够依时间跟踪整个目录的变动。 目录和文件都能进行版本控制。 -
真实的版本历史
自从CVS限制了文件的版本记录,CVS并不支持那些可能发生在文件上,但会影响所在目录内容的操作,如同复制和重命名。除此之外,在CVS里你不能用拥有同样名字但是没有继承老版本历史或者根本没有关系的文件替换一个已经纳入系统的文件。在Subversion中,你可以增加(add)、删除(delete)、复制(copy)和重命名(rename),无论是文件还是目录。所有的新加的文件都从一个新的、干净的版本开始。 -
自动提交
一个提交动作,不是全部更新到了档案库中,就是不完全更新。这允许开发人员以逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题。 -
纳入版本控管的元数据
每一个文件与目录都附有一組属性关键字并和属性值相关联。你可以创建, 并儲存任何你想要的Key/Value对。 属性是随着时间来作版本控管的,就像文件內容一样。 -
选择不同的网络层
Subversion 有抽象的档案库存取概念, 可以让人很容易地实作新的网络机制。 Subversion 可以作为一个扩展模块嵌入到Apache HTTP 服务器中。这个为Subversion提供了非常先进的稳定性和协同工作能力,除此之外还提供了许多重要功能: 举例来说, 有身份认证, 授权, 在线压缩, 以及文件库浏览等等。还有一个轻量级的独立Subversion服务器, 使用的是自定义的通信协议, 可以很容易地通过 ssh 以 tunnel 方式使用。 -
一致的数据处理方式
Subversion 使用二进制差异算法来异表示文件的差异, 它对文字(人类可理解的)与二进制文件(人类无法理解的) 两类的文件都一视同仁。 这两类的文件都同样地以压缩形式储存在档案库中, 而且文件差异是以两个方向在网络上传输的。 -
有效的分支(branch)与标签(tag)
在分支与标签上的消耗并不必一定要与项目大小成正比。 Subversion 建立分支与标签的方法, 就只是复制该项目, 使用的方法就类似于硬连接(hard-link)。 所以这些操作只会花费很小, 而且是固定的时间。 -
Hackability
Subversion没有任何的历史包袱; 它主要是一群共用的 C 程序库, 具有定义完善的API。这使得 Subversion 便于维护, 并且可被其它应用程序与程序语言使用。
(3)常见的版本控制工具
VSS:微软的,主要应用到微软的平台(C#,ASP)
CVS:早期的版本控制。
SVN:取代CVS。
GIT:和SVN类似
二、SVN的使用
1、SVN的基本使用的原理
2、SVN开发使用的模式
(1)复制–>修改–>合并
(2)锁定–>修改–>解锁
3、SVN工作方式
图解
三、安装SVN的服务器VISUALSVN
安装VISUALSVN服务端
(1)服务端下载
VISUALSVN官网
https://www.visualsvn.com/
(2)安装
自定义SVN安装的位置,SVN仓库的位置,SVN代码备份的位置
选择启动
安装完成
四、安装SVN的客户端TortoiseSVN
1、下载TortoiseSVN
2、安装
五、使用SVN(全程不要保存密码)
1、在SVN服务端创建仓库
- 在Repositories上右键Create New Repository创建仓库
- 选择存放方式:文件类型
- 输入仓库名称
- 最后Finsh创建完成
2、创建项目
- 在test上右键,新建,创建工程
创建项目设置名称
仓库创建完成
3、创建两个用户
在Users上右键Create Users创建用户
输入用户名,密码,确认密码(创建两个用户)
创建成功
4、测试SVN
(1)在桌面创建两个文件夹
(3)在trunk上右键复制当前路径
(3)A,B两个用户与服务器同步
-
检出项目在上面创建的aa文件夹当中右键,点击SVN Checkout
如果不显示重启计算机
-
设置仓库项目路径(服务器保存代码的位置)以及检出路径(将代码放入本地的位置)
-
输入账号密码
-
aa用户同步完成
-
检出项目在上面创建的bb文件夹当中右键,点击SVN Checkout
-
bb用户同步完成
(4)在A端进行操作
- 在A端创建一个Java类(先通过记事本创建演示)
- 在aa文件下创建User.txt将其改为User.java文件
- 用记事本打开写入代码
- 创建好Java类
(5)将Java类上传到服务器上
- 将java 类添加到SVN的管理
在aa文件夹下的User.java右键
- 添加完成之后文件上会出现+号小图标
代表文件已经添加到SVN的管理了,但是还没有上传到服务器。 - 上传得到服务器提交
在上面创建好的User.java 上右键,点击SVN Commit
- 版本1
- User.java变成小对勾证明成功提交(和服务器的代码是同步的)
(6)在B端来进行操作
- 更新,在bb文件夹下右键SVN Update(从服务器上更新代码)
- 输入账号和密码后
版本2
- OK,在B用户的文件夹当中获取到A上传更新的代码(与服务器的代码是同步的)
- 可以在B的一端进行对代码的修改
- 修改User.java的代码完以后bb下(!说明对代码进行修改,与服务器不一致)
- B端将修改后的代码提交到服务器(User.java上右键 SVN Commit)
- OK,版本3
- 提交成功
(7)在A端来进行操作
- 在aa下右键更新代码
- 得到版本3
- 同步了服务器上B用户提交的代码
(8)在A端添加代码(不小心写错代码)
- A端修改完以后变为未同步的状态
- 提交
- 版本4
- B端同步以后使用该代码(Update)
- B端得到版本4的代码
- 发现有错误
5、测试SVN(恢复历史版本)
上面A端用户不小心写错代码,需要恢复历史版本
(1)浏览仓库
- 在bb文件夹下右键
- 查看日志
- 恢复到3版本
(2)保存历史版本
在3版本上右键
- 选择保存的地点和名称替换掉原来的文件
- 恢复到3版本
(3)更新历史版本到本地
- User.java右键显示日志信息
- 恢复到版本2
- 在版本2上右键
- 更新恢复到版本2
六、SVN冲突的解决
1、冲突问题解决
(1)描述代码冲突问题
A和B都是最新的代码,A修改了代码,提交了,B也修改了代码,但是在提交的时候会出现冲突问题了。
(2)将aa和bb都更新为最新版本的代码
- aa下
- bb下
(3)A用户修改代码的同时B用户也修改代码
- A修改
- B修改
- A用户提交
- B用户这个时候也提交
- 报错:我的User.java过时了
- 更新
- OK
- B的代码出错
- 叹号代表代码已经出现冲突了。
(4)解决冲突
- 编辑冲突:在有叹号的文件上右键Edit conficts编辑冲突
- 在发生冲突的位置上右键,有四个选项
- 解决冲突:选择第四个
- 点击保存
冲突解决
- 提交
2、对文件进行加锁(直接避免冲突)
(1)zh用户对代码文件进行加锁
- 其他用户对代码进行更改
- 提交代码
- 提交失败,提示当前代码被另外的用户锁上了
- 一般情况下不要将其锁上,解锁
将所释放
七、SVN的权限设置
1、创建用户
(1)在Users 上右键选择Create Users(创建用户)
输入用户名密码
再创建一个用户
2、创建组
输入组名称,add添加组当中的用户
添加成功
创建第二个组
3、设置权限
(1)给仓库设置权限
- 仓库设置权限添加开发人员和测试人员可以访问
- 然后点击确定
(2)给仓库下的 项目/目录 设置权限
- 其他是目录默认都是继承上一级目录的权限
(3)新增用户
(4)将其添加到组当中就拥有当前组的权限,将新创建cc添加到tester组当中
- 右键
- 添加以后cc会继承测试组的权限,上面设置测试组只能
八、Eclipse的SVN插件的使用
1、安装Eclipse的SVN的插件(引用之前写的文章)
eclipse安装svn插件的方法大致分为两种,一种是在线安装,一种是离线安装,在线安装又分为两种,一种是eclipse market自动在线安装,另外一种是手动的在线安装,接下来这篇文章教大家运用eclipse market自动在线安装svn插件。
1、首先我们在桌面找到eclipse工具,并打开,如下图所示:
2、然后在工具栏中找到最后一个help,并打开help工具下的Eclipse Marketplace,如下图所示:
3、Eclipse Marketplace的界面如下图所示,我们找到该界面的Search一栏:
4、我们在该界面的find一栏输入svn,并点击后面的放大镜搜索一下,截图如下所示:
5、搜索完毕后,我们拖动滚动条找到,Subclipse,然后选择install安装,如下图所示:
6、安装成功后出现如下图所示的结果,然后我们选择confirm确定,截图如下:
7、等待程序反应完毕后,选择确定按钮,然后选择接受意见,然后选finish完成,完成之后重启eclipse软件,重启成功后,svn就安装成功了:
2、将项目发布到SVN的服务器上去,新用导入服务器上的项目
(1)在Visualsvn当中创建一个新的项目
- 复制项目的路径
- 在eclipse当中
用户分析项目到服务器,要分享的项目上右键,分享项目
Finish
输入账号密码
- 提交项目
- 点击OK
小原柱说明项目提交成功(和服务器同步)
(2)新用户导入项目
- 点击项目右上角的方块,选择SVN资源研究所
- 复制路径
- 在SVN资源库当中右键新建资源库
- 修改路径,可以是公司的IP地址
- 完成输入另外一个账号和密码
- 链接成功可以查看到项目
- 将项目下载到本地
- 右键
- 导入成功
(3)测试使用效果:在store1创建User类
package com.itzheng.domain;
public class User {
private String username;
}
- 将项目提交到服务器
- 在store2上右键
- 更新得到上一个用户的的代码
(4)删除项目需要先断开链接
3、解决冲突
当中两个用户同时提交项目的时候一个用户会出现冲突
在冲突的文件上右键编辑冲突
修改冲突的位置