公司情况:
1、现在的软件开发一般是项目进行,一个项目中会有很多人参与,那么每个人手中都有自己的一份修改备份,最后谁的版本是最新的?
2、有时候一款软件开发出来之后会有很多个版本,比如1.0版本、2.0版本,而且每个大版本下面还有小版本,如1.1.1、2.2.1等版本,如此多代码如何管理?(SVN就可以解决这些问题,现在也有另外一种方式就是git,git下次再介绍)
Subversion简介
一款自由开放的版本控制软件(简称SVN)
- 功能
Subversion可以管理文件、文件夹以及记录它们的修改状况。 - 应用
Subversion常用来帮助我们管理软件开发的源代码或是公司文档。 - 具体实现
Subversion通过将文档导入至版本库中进行管理,版本库类似于文件服务器,但比文件服务器更加强大的是,它可以记录用户每次对文件或目录的修改状况,并提供还原数据至老版本的功能。
svn场景模拟
流程1:
版本库是我们存放资料的地方,图中用户A和用户B经常需要对版本库中的资料进行读写操作。现在两个用户都从版本库中将数据复制到了本地,此时用户电脑上的数据是版本库的副本。
- 客户端可以通过三种方式连接至服务器取得版本库中的数据
1.本地连接(不需要联网)
2.SVN连接(分为加密和不加密的,需要联网)
3.Apache连接(需要联网)
流程1.png
流程2:
两个用户分别在自己的电脑上对副本文件进行修改,分别为版本A1和版本B1,并且用户A先与版本库进行了数据同步,将本地的最新版本数据更新到服务器上,服务器上的版本会被更新至A1版本。
流程2.png
流程3:
随后用户B也将自己的版本B2与服务器数据版本同步,则服务器会提醒用户B,他的版本已经过期了,如果用户A和用户B修改的数据并不冲突,(如两个修改的是版本库中的不同文件,或是同一个文件的不同位置)则更新,SVN可以自动将两个版本合并成一个版本;如果两个人修改的位置冲突,则需要人工判断谁的修改有效,最后再上传至版本库。
流程3.png
SVN服务器不同访问方式对比
客户端访问服务器时可以通过种方式访问:
1.svnserve访问
2.svnserve+SSH访问
3.Apache间接访问
4.本地访问
- 服务器启动一个svnserve服务,svnserve是一个小巧、轻便的服务器程序,客户端通过使用Subversion专用的协议对他进行访问,其特点是简单。
- 由于svnserve本身并不提供数据加密通信的功能,所以,如果你需要更加安全地连接,可以使用svnserve+ssh的方式与服务器建立SSH隧道连接,再通过SSH调用svnserve程序,实现数据的安全加密传输。
- Apache通过mod_dav_svn模块也可以访问版本库,这样客户端可以通过访问Apache取得版本库资料,从而完成对数据的版本控制,其优点是用户可以直接使用浏览器访问版本库。
- 最后一种是本地方式连接服务器,这种方式最大的好处是不需要联网,就可以对服务器做直接的操作,但是实际工作中,客户端和服务器往往不在相同的主机,所以应用相对较少。
各种连接方式的比较
| 功能 | Apache+DAV | svnserve | Svnserce+SSH |
|---|---|---|---|
| 认证 | HTTP基本认证、LDAP、证书 | 支持MD5认证 | SSH认证 |
| 权限 | 可对版本库整体设置权限,也可以对指定目录设置权限 | 可对版本库整体设置权限,也可对指定目录设置权限 | 仅对版本库整体设置权限 |
| 加密 | 支持SSL加密 | 无 | 支持SSH隧道加密 |
| 日志 | 完善的Apache日志 | 无 | 无 |
| 速度 | 慢 | 快 | 快 |
| 设置 | 相对复杂 | 简单 | 相对简单 |
安装SVN的方式
- Subversion版本控制软件在CentOS7的系统光盘中有RPM格式的版本,但RPM的方式安装无法自定义设置。
yum install subversion - 使用源码包编译安装灵活性高,可到Subversion官网下载源码软件
目前最新的版本:
http://mirrors.tuna.tsinghua.edu.cn/apache/subversion/subversion-1.12.0.tar.gz
SVN的服务搭建
1、安装版本库软件
yum -y install subversion
2、创建服务器版本库
mkdir /svn
svnadmin create /svn/web_project/
使用svnadmin创建版本库,会自动生成如图1的文件
图1 Web_project目录下的文件和目录.png
3、认证和授权
当客户端访问版本库服务器时,服务器会根据版本库目录下的conf/svnserve.conf文件中定义的认证与授权策略实现权限的控制
只发布一个版本库
默认SVN会将服务器计算机中所有的版本库共享给网络用户,但有时我们仅希望发布其中一个版本库时,就需要限制仅发布Web_project一个版本至网络,这样客户端可以使用相对路径访问版本库,同时服务器如果需要在authz为目录设置权限,路径应该为[/]或[/test],即这里的根[/]仅表示Web_project版本库,[/test]表示Web_project下的test目录。使用 -r 选项,后面接版本库的路径,就可发布个别版本库给网络用户。
1、仅发布一个版本库/svn/Web_project,客户端可以通过相对路径访问版本库Web_project(即svn://192.168.129.150/Web_project),通过绝对路径访问(即svn://192.168.129.150/svn/Web_project),无效。
绝对路径.png
相对路径
2、
发布个别版本库(错误)
svnserve -d -r /svn/Web_project不生效(想具体到版本库的,不行,应该为版本库的路径)
svn服务端.png
win7客户端
仅发布个别版本库(正确)
svnserve -d -r /svn/
svnserve -d -r/svn
svn服务端.png
win7客户端.png
SVN的工具
- svnadmin
- svn
- svnlook
- svnservn
工具说明:
-
svnadmin工具是Subversion软件所提供的版本库管理工具,该工具可以用来创建库、备份库、修订版本等操作。
用法:svnadmin 命令 /版本库路径 [选项]
命令:
create 创建一个新的版本库
hotcopy 版本库热备
lslocks 打印所有的所描述
#创建版本库project1
svnadmin create /var/svn/project1
#热备版本库
svnadmin hotcopy /var/svn/project1 /var/svn/project1_copy
-
svn是subversion客户端命令行工具。
用法:svn 命令 [选项]
选项:
--password 密码
--username 用户名
--revision(-r) 指定要检查的版本
命令:
add 添加文件、目录或符号链接(此处的文件、目录或符号链接是在本地副本创建的)
cat 输出特定文件的内容
checkout(co) URL[@REV][PATH]
commit(ci) 将本地工作副本修改后的内容发布到版本中
copy SRC DST 将工作副本中的一个文件或目录复制至版本库
delete PATH 从本地工作副本中删除一个项目
delete URL 从版本库中删除一个项目
diff 比较两个版本之间的差别
import 提交一个路径的副本至版本库
info 显示本地或远程版本信息
list(ls) 列出版本库的数据
add的用法:客户端创建文件和目录时就要用到add
add的用法.png
log的用法
整体的日志.png
某个文件的日志.png
-
svnlook是subversion检查工具
用法:svnlook 命令 /版本库路径 [选项]
命令:
author 显示作者
cat 显示版本库的文件内容
date 显示时间标记
log 显示日志消息
tree 显示版本库资料树 -
svnserve:SVN服务器程序
svnserve -d 后台运行
Linux中将代码导入仓库
- svn客户端命令行工具:可以将项目代码导入到版本库中
#import代表导入操作,file:///代表本地连接 -m后面是说明性的字符串,可以是任意字符。
svn import /var/Web_code file:///var/svn/project1/ -m "Initial Data"
#列出版本库中的资料列表
svn list file:///var/svn/project1
svn checkout file:///svn/Web_project
image.png

图1 Web_project目录下的文件和目录.png
绝对路径.png
相对路径
svn服务端.png
win7客户端
svn服务端.png
add的用法.png
整体的日志.png
某个文件的日志.png
image.png










网友评论