title: 版本控制之SVN:安装和简单实用
categories: Linux
tags:
- SVN
timezone: Asia/Shanghai
date: 2019-02-19
什么是SVN?
1>.SVN(subversion)是今年来崛起的版本管理工具,与CVS一样,SVN是一个跨平台的开元的版本控制系统,Subversion管理着随时间改变的数据。这些数据放置在一个中英资料档案库中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以吧档案回复到旧的版本,或是浏览文件的变动历史。
2>.SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。
3>.相对于大多数公司来说,SVN是最普及的,其他版本控制比较流行的还有GIT。
4>.SVN是一个通用的软件系统,它不但可以用来管理程序源码,他还可以管理任何类型的文件,如文本,视频,图片等等。
SVN的服务器运行模式与访问方式
1.SVN服务端运行模式
SVN常见的有三种运行访问方式
a>.独立服务器(例如:svn://svn.yinzhengjie.com/jky);
b>.借助Apache(例如:http://svn.yinzhengjie.com/jky);
c>.本地直接访问(例如:file:///yinzhengjie/svndata/jky);
2.svn客户端访问方式
Subversion可以通过多种方式访问,如本地磁盘访问或各种各样不同的网络协议,但是一个版本库地址永远都是一个URL。
方式一:“file:// ”
访问方法:直接版本库访问(本地磁盘或网络磁盘)
方式二:“http://”
访问方法:通过WebDAV协议访问支持Subversion的Apache服务器。
方式三:“https://”
访问方法:与“http://”相似,但是用了SSL加密。
方式四:“svn://”
访问方法:通过未认证的TCP/IP自定义协议访问svnserve服务器。
方式五:“svn + ssh://”
访问方法:通过认证未加密的TCP/IP自定义协议访问svnserve服务器。
环境
[root@centos181001 help]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
[root@centos181001 help]# svnserve --version
svnserve,版本 1.7.14 (r1542130)
编译于 Apr 11 2018,02:40:28
第一步:安装
方法1:YUM方式安装
1.安装subversion
yum install -y subversion
2.检查是否安装成功
svnserve --version
3.新建目录,用于存放SVN所有文件
mkdir /home/svn
4.新建版本仓库
svnadmin create /home/svn
5.添加用户:编辑以下文件并增加以下行(用户名:admin 密码:xiaoliu)
cp /home/svn/conf/passwd /home/svn/conf/passwd.bak
vim /home/svn/conf/passwd
admin = xiaoliu
6.修改svnserve.conf
cp /home/svn/conf/svnserve.conf /home/svn/conf/svnserve.conf.bak
vim /home/svn/conf/svnserve.conf
[general]
### Valid values are "write", "read", and "none".
### 设置匿名权限为不可读、不可写
anon-access = none
### 设置经过有验证用户权限为可读、可写
auth-access = write
### 设置密码文件为passwd
password-db = passwd
### 指定基于路径的访问控制文件名称
### 如果未指定authz-db,则不会执行基于路径的访问控制。
### 取消注释下面的行以使用默认授权文件。
authz-db = authz
### 是否对用户名进行大小写转换
### “upper”(大写用户名)
### “lower”(小写用户名)
### “none”(用于比较用户名而不进行大小写转换,这是默认行为)。
force-username-case = none
7.修改authz权限控制配置文件
cp /home/svn/conf/authz /home/svn/conf/authz.bak
vim /home/svn/conf/authz
# 定义admin组和user组,用户列表使用,分割
[groups]
admin = admin1,admin2
user = user1,user2
# 定义根目录的权限为admin组可读、可写,user组可读、不可写
[/]
@admin = rw
@user = r
8.启动SVN
svnserve -d -r /home/svn
第二步:使用SVN
Windows安装TortoiseSVN来管理SVN
1.下载安装包和中文补丁并安装
https://tortoisesvn.net/downloads.html
https://mirrors.tuna.tsinghua.edu.cn/osdn/storage/g/t/to/tortoisesvn/1.11.1/Application/TortoiseSVN-1.11.1.28492-x64-svn-1.11.1.msi
https://mirrors.xtom.com.hk/osdn//storage/g/t/to/tortoisesvn/1.11.1/Language%20Packs/LanguagePack_1.11.1.28492-x64-zh_CN.msi
2.使用以下地址检出
svn://11.11.11.61
第三步:升级成http认证服务器
1.安装mod_dav_svn和httpd,mod_dav_svn是apache服务器访问svn的一个模块
yum install -y mod_dav_svn httpd
2.安装成功后,会有mod_dav_svn.so和mod_authz_svn.so两个文件。
find / -name mod_dav_svn.so
find / -name mod_authz_svn.so
3.创建web用密码文件
http只支持加密的密码
这里同样需要同步调整authz权限控制配置文件,因为我们上边已经设置过了,所以此步略过
touch /home/svn/conf/webpasswd
htpasswd -b /home/svn/conf/webpasswd admin1 xiaoliu
htpasswd -b /home/svn/conf/webpasswd admin2 xiaoliu
htpasswd -b /home/svn/conf/webpasswd user1 xiaoliu
htpasswd -b /home/svn/conf/webpasswd user2 xiaoliu
4.修改httpd.conf配置文件
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
vim /etc/httpd/conf/httpd.conf
5.修改svn目录所有者为apache
chown -R apache:apache /home/svn/
6.启动httpd服务
systemctl start httpd
systemctl status httpd
7.打开浏览器和客户端测试
直接浏览器打开或者SVN客户端均可打开。
http://11.11.11.61
附录:svnserve --help
用法: svnserve [-d | -i | -t | -X] [options]
有效选项:
-d [--daemon] : 后台模式
-i [--inetd] : inetd 模式
-t [--tunnel] : 隧道模式
-X [--listen-once] : 监听一次方式(调试用)
-r [--root] ARG : 服务的根目录
-R [--read-only] : 强制只读;覆盖版本库配置文件
--config-file ARG : 从文件 ARG 读取配置
--listen-port ARG : 监听端口
[方式: daemon, listen-once]
--listen-host ARG : 监听主机名称或IP地址
[方式: daemon, listen-once]
-6 [--prefer-ipv6] : 在使用主机名称监听时,首选 IPv6
[默认首选 IPv4。不支持在守护进程模式中同时使用 IPv4
和 IPv6。如果需要,请使用 inetd 模式或隧道模式。]
-c [--compression] ARG : 用于网络传输的压缩级别
[0 .. 不压缩, 5 .. 默认,
9 .. 最大压缩]
-M [--memory-cache-size] ARG : 用来减少冗余操作的内存中的额外高速缓存的大小(MB)
线程模型的默认值是 128,非线程模型的默认值是 16。
[仅用于 FSFS 仓库]
--cache-txdeltas ARG : 是否对旧版本之间的差异启用缓存
默认值: 否。
[仅用于 FSFS 仓库]
--cache-fulltexts ARG : 是否对文件内容启用缓存
默认值: 是。
[仅用于 FSFS 仓库]
-T [--threads] : 使用线程代替进程 [方式: daemon]
--foreground : 在前台运行(调试用)
[方式: daemon]
--log-file ARG : svnserve 日志文件
--pid-file ARG : 写进程 PID 到文件 ARG
[方式: daemon, listen-once]
--tunnel-user ARG : 隧道用户名(默认是当前UID对应的用户名)
[方式: tunnel]
-h [--help] : 显示本帮助
--version : 显示程序版本信息
-q [--quiet] : 在标准错误输出不显示进度 (仅错误)
附录:svnadmin命令格式
svnadmin help crashtest
crashtest: 用法: svnadmin crashtest REPOS_PATH
打开位于 REPOS_PATH 的版本库, 然后终止, 从而模拟一个持有版本库句柄进程的崩溃。
svnadmin help create
create: 用法: svnadmin create REPOS_PATH
在 REPOS_PATH 创建一个新的空版本库。
有效选项:
--bdb-txn-nosync : 在提交事务时禁用fsync [BDB]
--bdb-log-keep : 禁用自动删除日志文件 [BDB]
--config-dir ARG : 从目录 ARG 读取用户配置文件
--fs-type ARG : 版本库类型: “fsfs”(默认)或“bdb”
--pre-1.4-compatible : 使用与1.4之前版本兼容的格式
--pre-1.5-compatible : 使用 Subversion 1.5 之前版本的格式
--pre-1.6-compatible : 使用与 1.6 之前版本兼容的格式
svnadmin help deltify
deltify: 用法: svnadmin deltify [-r LOWER[:UPPER]] REPOS_PATH
在指定的版本范围中,对其中变动的路径增量计算。借助只储存与以前版本的差异,
它本质上可压缩版本库。如果没有指定版本则直接对 HEAD 版本进行。
有效选项:
-r [--revision] ARG : 指定版本 ARG (或 X:Y 范围)
-q [--quiet] : 在标准错误输出不显示进度 (仅错误)
-M [--memory-cache-size] ARG : 用来减少冗余操作的内存中的额外缓存的大小(MB)
默认值: 16。
[仅用于 FSFS 仓库]
svnadmin help dump
dump: 用法: svnadmin dump REPOS_PATH [-r LOWER[:UPPER] [--incremental]]
将文件系统的内容,以可移植“转存”格式输出到标准输出,并将反馈输出到标准错误。
转存 LOWER 与 UPPER 版本之间的内容。如果没有指定版本,则转储所有的版本树。
如果只有指定 LOWER ,则只转储一个版本树。如果使用了 --incremental 选项,那么
第一个转存的版本只描述它改变的路径;否则它会描述此版本在版本库中涉及到的每个
路径。(在任何情况下,第二个以及后续的版本,只描述这些版本改变的路径。)
有效选项:
-r [--revision] ARG : 指定版本 ARG (或 X:Y 范围)
--incremental : 以增量方式进行转存
--deltas : 在转存输出中使用差异
-q [--quiet] : 在标准错误输出不显示进度 (仅错误)
-M [--memory-cache-size] ARG : 用来减少冗余操作的内存中的额外缓存的大小(MB)
默认值: 16。
[仅用于 FSFS 仓库]
svnadmin help hotcopy
hotcopy: 用法: svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
产生版本库的即时副本。
有效选项:
--clean-logs : 删除源版本库中多余的BDB日志文件 [BDB]
svnadmin help list-dblogs
list-dblogs: 用法: svnadmin list-dblogs REPOS_PATH
列出所有的BDB日志文件。
警告: 修改或删除仍在使用中的记录文件将导致版本库损坏。
svnadmin help list-unused-dblogs
list-unused-dblogs: 用法: svnadmin list-unused-dblogs REPOS_PATH
列出无用的BDB日志文件。
svnadmin help load
load: 用法: svnadmin load REPOS_PATH
从标准输入读取“转存”格式的流,将新的版本提交至版本库的文件
系统中。如果版本库原先是空的,默认会将其 UUID 以流中的数值代替。
进度报告会送至标准输出。
有效选项:
-q [--quiet] : 在标准错误输出不显示进度 (仅错误)
--ignore-uuid : 忽略所有流中的版本库 UUID
--force-uuid : 如果流中存在UUID,则设定为版本库的 UUID
--use-pre-commit-hook : 提交版本前调用 pre-commit 钩子
--use-post-commit-hook : 提交版本后调用 post-commit 钩子
--parent-dir ARG : 加载到版本库指定的目录中
--bypass-prop-validation : 跳过属性校验逻辑
-M [--memory-cache-size] ARG : 用来减少冗余操作的内存中的额外缓存的大小(MB)
默认值: 16。
[仅用于 FSFS 仓库]
svnadmin help lslocks
lslocks: 用法: svnadmin lslocks REPOS_PATH [PATH-IN-REPOS]
显示位于 PATH-IN-REPOS 或其子孙上的所有锁的描述(如果没有提供 PATH-IN-REPOS,
那么显示版本库根的信息)。
svnadmin help lstxns
lstxns: 用法: svnadmin lstxns REPOS_PATH
显示所有未提交事务的名称。
svnadmin help pack
pack: 用法: svnadmin pack REPOS_PATH
使用更有效的存储模型压缩版本库。
它可能不适用于所有的版本库,此时直接结束。
有效选项:
-q [--quiet] : 在标准错误输出不显示进度 (仅错误)
svnadmin help recover
recover: 用法: svnadmin recover REPOS_PATH
对版本库运行修复程序。当你遇到应当执行修复的错误指示时,请执行此命令。
修复 Berkeley DB 需要独占访问,如果版本库被其它进程使用,它会立即退出。
有效选项:
--wait : 如果版本库被其他进程占用,等待而不直接退出
svnadmin help rmlocks
rmlocks: 用法: svnadmin rmlocks REPOS_PATH LOCKED_PATH...
无条件地从每个 LOCKED_PATH 删除锁。
svnadmin help rmtxns
rmtxns: 用法: svnadmin rmtxns REPOS_PATH TXN_NAME...
从版本库删除命名事务。
有效选项:
-q [--quiet] : 在标准错误输出不显示进度 (仅错误)
svnadmin help setlog
setlog: 用法: svnadmin setlog REPOS_PATH -r REVISION FILE
将版本 REVISION 的日志信息设为 FILE 的内容。使用 --bypass-hooks 来避
免触发与修改属性相关的钩子(例如,你不需要你的 post-revprop-change 钩
子发送 email通知,或者在 pre-revprop-change 钩子中禁止了修改属性)。
注意: 修订属性并未纳入版本管理,所以这个命令会覆盖以前的属性取值。
有效选项:
-r [--revision] ARG : 指定版本 ARG (或 X:Y 范围)
--bypass-hooks : 跳过版本库钩子系统
svnadmin help setrevprop
setrevprop: 用法: svnadmin setrevprop REPOS_PATH -r REVISION NAME FILE
将版本 REVISION 的属性 NAME 设为 FILE 的内容。使用
--use-pre-revprop-change-hook/--use-post-revprop-change-hook 来触发与修
改属性相关的钩子(例如,你需要在你的 post-revprop-change 钩子中发送 email
通知)。
注意: 修订属性并未纳入版本管理,所以这个命令会覆盖以前的属性取值。
有效选项:
-r [--revision] ARG : 指定版本 ARG (或 X:Y 范围)
--use-pre-revprop-change-hook : 修改属性前调用钩子
--use-post-revprop-change-hook : 修改属性后调用钩子
svnadmin help setuuid
setuuid: 用法: svnadmin setuuid REPOS_PATH [NEW_UUID]
重置位于 REPOS_PATH 的版本库 UUID。如果提供 NEW_UUID,那么它就成为版本库的
新 UUID;否则就为版本库生成一个新的 UUID。
[root@centos181001 help]# svnadmin help upgrade
upgrade: 用法: svnadmin upgrade REPOS_PATH
升级位于 REPOS_PATH 处的版本库到支持的最新方案版本。
此功能为想使用新的 Subversion 特性,并且不想付出全库导出后加载数据操作
等代价的版本库管理员提供便利。同样地,此升级操作在保持版本库完整性的前
提下执行最少的工作来完成升级。它不担保版本库的状态与导出后加载的升级方
案一样最优化。
svnadmin help verify
verify: 用法: svnadmin verify REPOS_PATH
校验版本库中的数据。
有效选项:
-r [--revision] ARG : 指定版本 ARG (或 X:Y 范围)
-q [--quiet] : 在标准错误输出不显示进度 (仅错误)
-M [--memory-cache-size] ARG : 用来减少冗余操作的内存中的额外缓存的大小(MB)
默认值: 16。
[仅用于 FSFS 仓库]
附录:
Subversion官网:http://subversion.apache.org/packages.html