Table of Contents
一、SVN概述
1、为什么需要SVN版本控制软件
- 协作开发
- 远程开发
- 版本回退
2、解决之道
SCM : 软件配置管理
所谓的软件配置管理实际就是对软件源代码进行控制与管理
CVS : 元老级产品
VSS : 入门级产品
ClearCase : IBM公司提供技术支持
SVN : 主流产品
3、什么是SVN
- SVN全称SubVersion
- SVN是近年来崛起的版本管理工具,是CVS的接班人。目前,绝大多数软件公司都使用SVN作为代码版本管理软件
- 特点:操作简单,入门容易;;;支持跨平台操作;;;支持版本回退功能
4、获取SVN软件
属于C/S结构软件(客户端与服务端)
服务端软件:VisualSVN
网址:https://www.visualsvn.com/downloads/
客户端软件:Tortoisesvn
网址:http://tortoisesvn.net/downloads
二、SVN软件安装
1、SVN工作流程
2、服务端的安装过程
根据上方地址,下载完成;
1)第一步,Next
2)第二步,Next
3)第三步,Next
4)第四步,Next
5)第五步,Next
三、SVN服务端配置
1、创建一个项目
1)首先在SVN服务端创建一个共有目录WebApp作为项目目录
2)在WebApp目录下创建Shop文件夹,作为Shop(版本仓库)
3)创建版本仓库,DOS环境基本语法:
svnadmin create Shop 文件夹路径(Shop仓库)
如果Shop创建配置成功,那么Shop文件夹显示以下目录结构
2、进行服务端监管
Apache =>http://localhost 或 (ip地址)访问到htdocs目录下相关文件(监管)
SVN => svn://localhost 或(ip地址)访问到相关数据仓库(如Shop仓库)
基本语法:
svnserver -d(后台运行) -r(监管目录)版本仓库路径
如下图所示:
通过以上指令,我们的svn://localhost 或 ip 地址就可以直接指向 Shop 版本仓库
3、权限控制
默认情况下,SVN服务器是不允许匿名用户上传文件到服务器端的,所以必须更改项目的相关配置文件
打开配置文件进行修改:更改第19行代码,去除前面的空格以及 '#'(更改其值为write)
四、SVN客户端软件安装与使用
1、获取软件安装包
网址:http://tortoisesvn.net/downloads
2、确认操作系统位数
- 64位
3、客户端软件安装步骤
1)双击软件包运行(TortoiseSVN)
一路Next
注:在TortoiseSVN软件安装完毕之后,请一定要重启计算机,否则 SVN 图标是无法显示的!!
如果我们鼠标右键出现如下两个图标,代表我们已经安装成功了!
4、使用客户端软件连接SVN服务器
(Checkout检出)
首先在你的项目目录鼠标右键 => TortoiseSVN =>版本库浏览器 =>输入SVN服务器地址
svn://SVN服务器地址 => 项目(仓库)
出现.svn隐藏文件夹的话,代表检出成功(没显示的话,可能文件被隐藏,修改为显示隐藏文件,重新进行上面两步操作即可)
五、SVN使用详解(1)-三大指令
1、回顾SVN三大指令
1)(Checkout)检出操作:①链接到SVN服务器端 ②更新服务端数据到本地
注意:Checkout 只在第一次链接时操作一次,以后如果进行更新操作请使用Update(更新指令)
2) (commit)提交操作:①提交本地数据到服务器
如果显示以下界面,表示提交成功
以上工作大部分是由项目经理完成的,那么如果公司新来一个程序员(李四),他需要做哪些操作呢?
1)检出操作,效果如下:
2)Commit(提交),效果如下:
以上指令通常是在模块开发完毕之后上传
3)项目经理(Update更新操作)
六、SVN使用详解(2)-图标集与忽略功能
1、图标集
1)常规图标
含义:当客户端文件与服务器端文件完全同步时,系统显示以上图表
2)冲突图标
含义:当客户端文件与服务器端文件完全同步时,系统显示以上图标
3)删除图标
含义:当服务器数据已经删除,那么客户端该文件显示以上图标
4)增加图标
含义:当我们编写文件已添加到提交队列,那么系统将自动显示以上图标
5)无版本控制图标
含义:当我们编写的文件没有添加到上传队列时,系统将自动提示以上图标
6)修改图标
含义:当客户端文件有修改但未提交,此时将自动显示以上图标
7)只读图标
含义:当客户端文件以只读形式存在时,将自动显示以上图标
8)锁定图标
含义:当服务端数据已锁定,那么客户端文件将自动显示锁定图标
9)忽略图标
含义:客户端文件已忽略,不需要进行提交上传,那么将自动显示以上图标
2、忽略功能
有些文件不希望上传至svn服务器,应该将该文件或该类型的文件添加至忽略列表
七、SVN使用详解(3)-版本回退
1、什么是版本回退
有些时候,软件的运行可能使开发者或使用者不满意,这时我们需要把当前版本退回到以前的某个版本。
传统形式的存储机制与SVN存储机制的对比
2、演示SVN版本回退功能
1、删除需求文档
2、在项目空白处鼠标右键,采用如下图所示操作
3)根据日志进行回退(3版本是进行删除的操作,我们需要回退到2版本,所以点击2,然后点击OK即可)
4)回退后效果如下
八、SVN使用详解(4)-版本冲突
1、什么是版本冲突
在实际项目开发中,如果两个人同时修改某个文件就会产生版本冲突问题
2、模拟版本冲突
模拟以上过程出现以下错误
3、解决之道
1)合理分配项目开发时间
旺财 上午开发
小强 下午开发
2)合理分配项目开发模块
旺财 购物车模块
小强 文章模块
3)通过SVN解决版本冲突问题
①更新服务器端数据到本地
index.php : 整合后的index.php文件
index.php.mine : 小强修改后的index.php文件
index.php.r6 : 09:00更新时的index.php(起始状态)
index.php.r7 :旺财修改后的index.php文件
② 删除除index.php以外的其他三个文件
③ 修改整合index.php冲突文件
④ 重新提交数据到 SVN 服务器端,即可解决版本冲突问题
九、配置多仓库与权限控制
1、配置多仓库
在实际项目开发中,我们可能会同时开发多个项目,那么我们如何进行多项目监管呢?
通过 svnserve 进行仓库监管,但是监管指令只能监管某一个文件夹,而不能同时监管多个仓库。
答:可以通过监管 WebApp 总目录来达到监管所有仓库的目的
svnserve -d(后台运行) -r(监管目录) WebApp(项目总目录)
①打开DOS窗口,输入以下命令
svn://localhost 或 ip 地址来访问 D:/svn/WebApp 目录
如果需要访问 Shop 项目、Wechat 项目
Shop项目:svn://localhost/Shop
Wechat项目:svn://localhost/Wechat
2、权限控制
如果要使用权限控制有一个前提:必须首先开启权限功能
在每一个仓库中都有一个 conf 文件夹,里面有三个文件
authz 文件:授权文件
告诉哪些用户具有哪些权限
passwd 文件:认证文件
标识当前 svn 系统中某个仓库具有哪些用户以及相应的密码
默认情况下,以上两个文件都是禁用的,如需要使用,首先要开启以上两个文件
svnserve.conf 配置文件
开启步骤如下:
① 注释匿名用户的可读可写权限
② 开启认证文件与授权文件
③ 编写认证文件定义相关用户名与密码
④ 编写授权文件
⑤ 测试
输入:admin admin888 (超级管理员)即可
十、SVN服务的配置与管理
1、配置自启动服务
不用每次启动都在DOS中启动了
sc create SVNService binpath="C:\Program Files\VisualSVN Server\binsvnserve.exe --service -r D:/svnroot" start=auto
sc create 服务名称 binpath=空格"svnserve.exe-service-r D:/svn/WebApp" start=空格 auto
创建系统服务。服务名SVNService
① 打开运行,输入 cmd 指令,打开 DOS 环境(请使用超级管理员运行)
②输入以下指令
③ 查看系统服务
控制面板 => 管理工具 => 服务
双击运行,启动SVNService服务
十一、SVN 工作流程
1、SVN 工作流程
2、钩子程序
所谓钩子就是与一些版本库事件触发的程序,例如新修订版本的创建,或是未版本化属性的修改
默认情况下,钩子的子目录(版本仓库/hooks/)中包含各种版本库钩子模块
post-commit.tmpl :事务完成后所触发的钩子程序
钩子程序默认情况可以采用批处理指令或 Shell 指令来进行编写
3、通过批处理指令编写钩子程序
① 指令 svn 服务端工作目录
设置服务器端 SVN 路径
SET SVN="C:\Program Files\VisualSVN Server\bin\svn.exe"
② 指定 Web 服务器工作目录
设置服务器项目运行目录
SET DIR="D:\server\apache\htdocs\shop"
③通过 update 指令实时更新数据到 DIR 目录中
SVN update %DIR%
④、具体使用步骤
第一步:复制post-commit.tmpl为 post-commit.bat 文件
第二步:填入相关处理指令
略。。。。。。需要再更新