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

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐