SVN学习笔记
1. SVN简介
1. 定义
svn是subversion的简称,是Apache研发的一个开源的版本控制系统。
2. SVN的作用
- 实现项目资源共享
- 实现资源文件的版本控制
3. 工作原理
在SVN管理下,文件和目录可以超越时空;其讲文件存放在中心版本库中,这个版本库类似普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况,这样就可以借此将数据恢复到以前的版本并可以查看数据的更改细节。
4. 传统文件共享方式的弊端
- 拷贝方式
- 发送与接收文件的工作量巨大
- 对前一版本的恢复较难
- 团队成员无法及时获取更新
- 同一文件多人修改,可能会出现内容冲突,且不能确定修改的具体时间及相关人员
- ftp服务器方式
- 版本迭代,浪费空间
- 资源无法设置访问权限
- 资源安全性降低
- 发生资源冲突,无法自动合并
5. svn体系结构
- 客户层
操作方式:图像用户界面和命令行方式 - 服务层
访问仓库层的方式三种:
DAV: http协议,通过互联网直接访问仓库,需要服务器进行解析
SVN: svn协议,通过SVN服务器进行解析
Local: file协议 - 仓库层
实现方式:FSPS文件服务器(默认)或 berkley DB 文件数据库
2. SVN命令行的使用
2.1 安装与配置
- 下载 https://www.visualsvn.com/downloads/
- 添加环境变量方便访问或直接在安装目录下使用
2.2 常用命令
- 管理员命令
svnadmin help svnadmin help create svnadmin --version svnadmin create path // 创建svn根目录 (svn仓库分为两级:顶层仓库和根仓库)
将svn服务注册为开机自启动的win服务
```sc create SVNService binpath= "....svn/bin/svnserve.exe --service -r 顶层仓库路径" start=auto depend=Tcpip
net start SVNService // 启动服务
net stop SVNService // 停止系统服务
// 删除服务,需要先停止系统服务
sc delete SVNService
```-- 该命令需要在管理员权限下运行
sc: serve create start:启动方式 depend:依赖协议
*[注]:
在创建根仓库时,顶层仓库必须存在;如果根仓库目录不存在会自动创建
2. 服务端命令
svnserve -h
svnserve -d(daemon) // 用于开启DOS系统下的svn服务
netstat -a // 查看当前网络连接状态,端口使用状况;svn默认端口号3690;svn://localhost:3690/d:/svn/repository/sms
svnserve -d --listen-port=8888 // 指定svn服务占用的端口号;访问svn://localhost:8888/d:/svn/repository/sms
svnserve -d -r path // 指定默认的svn顶层仓库路径,一旦指定,客户端在使用svn时直接给出根仓库名即可;svn://localhost/sms
3. 客户端命令
a) svn checkout // 检出,创建服务端指定根仓库与客户端指定目录(客户端连接目录 working copy)之间的连接关系
1)基于顶层仓库的checkout
开启SVN服务器,在任意目录下执行 svn checkout svn://localhost/sms d:/.../svn/group/aacof (指定working copy)其运行效果:在aacof目录中创建一个.svn的隐藏目录
若当前目录为working copy目录,则会创建根仓库
2) 基于根仓库的checkout
一般 svn checkout svn://localhost
服务端修改客户端权限
svn/repository/sms/config/svnserve.conf 中修改 anon-access = write/read
b) svn add
当一个文件/目录被添加到working copy中,SVN并不会感知其存在并不会对其进行管理,必须使用add命令将其添加到svn管理中
svn add 待添加文件/目录路径 (任意目录下写完整路径,working copy下直接写文件名即可)
被add的目录,会将当前目录及其子目录/文件都交由svn管理
c) svn commit
用于将客户端working copy中所有操作提交到服务端
svn commit targetfile -m description (描述和文件顺序可交换)
注:必须携带参数-m,用于完成日志记录;服务端无法以文件形式看到提交文件;省略目标文件则会上传所有修改文件
d) svn update
将当前客户端 working copy更新与服务端相同
e) svn delete
删除指定文件或目录,必须执行commit同步到svn服务端
f) svn revert
用于恢复客户端被删除的文件/目录,且这些删除文件没有执行commit,服务端删除后无法进行恢复
g) svn list
列举当前working copy中的文件
h) svn info
获取当前svn客户端与服务端的相关信息
## 3. Tortoise SVN客户端
1. 安装使用
https://tortoisesvn.net/downloads.html 安装包+语言包
1)可视化命令操作
在对应的根仓库下直接create创建
2)客户端图标不显示问题
windows支持 overlay icon(覆盖图标)最多15个,Windows本身及其他应用程序已占用所以出现图标没有变化问题 -- 通过其注册顺序加载(字符顺序ascii),修改注册表,重启生效
regedit -- 查找shellIconOverlayIdentifiers -- 修改tortoise文件名使其位置占据前面
3)客户端导入import
4)客户端导出export
目录右击导出,该目录并不会被导出只会导出目录中的内容
5)客户端可视化操作
svn delete 未执行commit,可通过 svn rever恢复;Windows本地删除通过Ctrl+z撤销删除;
返回指定版本update to revision 会作为一个新的版本,修改提交版本号递增
6)冲突
a. 同行冲突:只能人工进行冲突内容的选择
b. 异行冲突,多个客户端对同一版本文件进行修改,svn给出的解决方案将所有的修改进行合并
2. svn服务器设置
a. 为认证用户设置权限
b. 注册密码配置文件
c. 注册权限配置文件
d. 指定要应用的根仓库
```javascript
conf-auth文件修改
[/]
aa = rw
bb = r
* =
// 对于根仓库 aa用户具有读写权限 bb 只读 其他用户不具有权限 优先级更高
- 文件锁 - 获取文件锁 -属性 + 删除文件锁
svn与Apache服务器整合
使用svn自身的协议svn://一般用于局域网实现客户端与服务端的通讯,若要从外网访问svn服务器一般使用http协议,服务端通常为Apache服务器(Apache http server)
- Apache服务器下载
官网不提供Apache服务器的二进制运行文件,只提供源码,但是可以从官网找到二进制文件的推荐下载地址
https://www.apachehaus.com/cgi-bin/download.plx?dli=gTyADeWlWT41ERNlnZqJ1MVRUMUNlVSZETXJlSlhUV - 安装 - 解压 - 添加环境变量 - config文件夹中修改服务器路径 + 修改可以识别的首页文件
- 常用命令 - 需要在管理员权限下运行
a. httpd 无参数的该命令可以启动Apache服务器,但是当前命令行会一直处于等待状态,一旦关闭服务器就会停止,所以一般不用
b. httpd -h
c. httpd -k install (uninstall)
该命令将Apache服务器的服务安装为一个Windows服务,默认名称为Apache2.4 (-n name:实现命名) - p44