版本控制之SVN:安装和简单实用


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342