创建版本库
1 | svnadmin create 库名 |
运行版本库
1 | svnserve -d -r 库名 |
停止运行的所有版本库
1 | ## 停止运行的所有版本库 |
检出版本库
1 | ## 检出版本库 |
删除版本库
1 | rm -rfv 库名 |
svn版本库配置
- 配置文件位于版本库的conf文件夹下,该文件夹下有三个文件,分别是
authz
,passwd
,svnserve.conf
- authz 配置用户组以及用户组权限
- passwd 配置允许访问当前版本库的用户名和密码
- svnserve.conf 配置默认权限,权限配置文件及密码配置文件
注意:版本库配置必须在版本库运行前修改,否则配置不起作用。
常见svn客户端命令
1. svn add 添加到版本控制
1 | # 版本库增加文件 |
2. svn commit 提交修改到服务端(创建一个新版本号)
1 | # 提交文件或文件夹到svn服务端(-m后的参数必须加) |
3. svn update 更新工作副本
默认情况下,每个文件只会从服务端更新一次最新版本,此情况只适用修改的文件,但工作副本使用rm命令删除的文件,再次使用 svn update会将删除的文件从svn服务端拉取回来,所有删除文件需要使用svn命令。
1 | # 工作副本全目录更新到最新版本 |
4. svn delete 从版本库中删除文件或目录
1 | # 删除工作副本的文件,备注不是必备的,提交即可删除svn服务端对应文件 |
5. svn diff 版本差异比较
1 | # 比较工作副本与最后一次提交版本的差异 |
6. svn mkdir 创建目录并添加到版本控制中
1 | # 创建文件文件夹并将其添加到版本控制中,相当于使用系统命令mkdir创建文件夹再使用svn add 文件夹 |
7. svn cat 不检出工作副本直接查看指定文件
1 | # 脱离工作副本查看线上版本库(即svn服务端)的文件 |
*8. svn revert [–recursive][filename|] 工作副本的还原**
1 | # 还原工作副本的文件 |
二进制冲突与树冲突
- 冲突与产生条件
- 冲突出现于工作副本长时间未更新时
- 更新到的数据与工作副本的修改正好在同一处
- 树冲突
- 发生树冲突的文件都不是二进制文本文件
- 树冲突无法精确到行并且处理树冲突必须处理整个文件
- 冲突处理
- 发现冲突推荐选择(p)推迟处理,原因是选择mc或者tc会将修改直接提交到svn版本库中,推迟处理可以将冲突保存在工作副本中,不会提交到svn服务端。
1
2
3
4
5# svn处理工作副本的冲突命令
svn resolve 文件名
# 告知svn服务端本地工作副本已处理完某文件的冲突, 采用编辑文件的方式解决的冲突必须采用以下命令标志解决冲突,而采用svn resolve 解决冲突可以不必使用以下命令标志。
svn resolved 文件名
锁定与解锁
1. svn lock 锁定文件,防止其他成员对文件进行提交
1 | # 锁定文件,锁定文件并不需要提交,但是默认工作副本提交后会自动解锁文件 |
2. svn unlock 解锁文件
1 | # 解锁文件,解锁文件并不需要提交 |
svn进阶
svn list 列出当前目录下处于版本控制的所有文件
1
2
3
4
5
6
7
8
9
10
11# 列出当前目录处于版本控制的文件,无版本控制的文件不会列出,文件夹内容不会递归显示
svn list
# 列出当前目录处于版本控制的文件,文件夹内容会递归显示,而无版本控制的文件不会列出,
svn list --recursive
# 查看处于版本控制的文件(夹)的详细信息, 文件夹内容不会递归显示
svn ls -v
# 查看处于版本控制的文件(夹)的详细信息, 文件夹内容会递归显示
svn ls -v --recursivesvn status 列出工作副本中对文件(文件夹)状态
- ? 无版本控制
- M 已被编辑过
- D 已被标记从版本库中删除
- A 已被标记增加到版本控制中
- R 文件被替换
- C 文件存在冲突
- ! 文件缺失
1 | # 查看出工作副本中对文件(文件夹)状态 |
svn log 查看提交日志(来自svn commit 的-m参数)
1
2
3
4
5# 查看所有的提交日志
svn log
# 查看指定文件相关的提交日志
svn log 文件名snv info 工作副本及文件(文件夹)的详细信息
1
2
3
4
5
6
7
8# 查看整个版本库信息
svn info
# 查看版本库指定文件的xx
svn info 文件名
# 查看整个版本库信息,并且以xml显示和以管道输出到当前info.xml文件中
svn info --xml >> info.xml
多版本库解决方案
使用不同端口号使用多个版本库
1
2
3
4
5
6# 创建版本库
svnadmin create 库名
# 以指定端口号运行版本库,默认端口号是3690
svnserve -d -r 库名 --listen-port 端口号
举例: svnserve -d -r /svnroot/hello --listen-port 3691使用一个端口号运行多个版本库,多个版本库存放在同一个目录下
1
2
3
4
5
6
7# 以指定端口号运行版本库,默认端口号是3690
svnserve -d -r 多个版本库对应根目录
举例: svnserve -d -r /svnroot
# 检出版本库
svn checkout 地址/版本库名称
举例:svn checkout svn://192.168.0.1/hello
svn copy
- 工作副本 -> 工作副本
- 工作副本 -> 版本库(不可跨版本库操作!)
- 版本库 -> 工作副本 (可跨版本库操作!)
- 版本库 -> 版本库
1 | # 复制工作副本单个文件并重新命名,复制后的文件默认加入版本控制中 |
主干版本和分支版本
1 | # 复制线上版本库文件 |
svn高级应用
HOOKS钩子应用
钩子位于版本库的hooks文件夹下
版本库精简与丢弃
停止svn服务
1
killall svnserve
备份版本库系统
1
svnadmin dump 版本库文件系统路径 -r 版本号 : 版本号 >> 目录 文件名
新建版本库,并将备份版本库放到该版本库中
1
2svnadmin create 版本库
svnadmin load 版本库 < 备份文件名
版本库精简后,以前的工作副本不可再使用,需要重新检出版本库的一份工作副本。
版本库迁移与switch重定向
版本库迁移步骤:
- killall svnserve
- 把/svnroot/repo压缩成repo.zip
- 复制repo.zip到新服务器并解压
- 在新服务器运行repo版本库
工作副本switch重定向
1 | svn switch --relocate 旧版本库地址 新版本库地址 |
svn常见的坑
- 忘记配置svnserve.conf
- 运行版本库路径问题
- svnadmin dump/load 管道符号问题