Linux安装:svn

1、安装

1.1、yum安装

yum install subversion

测试安装是否成功:

svnserve --version

1.1.1、建立版本库

创建svn数据目录:

mkdir /opt/svndata

创建版本库:

svnadmin create /opt/svndata/simr

如果删除版本库:

rm -rf /opt/svndata/simr

1.1.2、配置svn配置文件

每个版本库创建之后都会生成svnserve.conf主要配置文件。编辑它:

vi /opt/svndata/simr/conf/svnserve.conf

[general]
anon-access = none #控制非鉴权用户访问版本库的权限
auth-access = write #控制鉴权用户访问版本库的权限
password-db = passwd #指定用户名口令文件名
authz-db = authz #指定权限配置文件名
realm = wangwa #指定版本库的认证域,即在登录时提示的认证域名称

1.1.3、编辑svn用户配置文件

vi /opt/svndata/simr/conf/passwd

[users]
admin = admin #用户,密码
fuhd = fuhd #用户,密码
test = test #用户,密码

1.1.4、编辑svn权限控制配置文件

vi /opt/svndata/simr/conf/authz

[groups]
admin = admin #admin为用户组,等号之后的admin为用户
test = fuhd,test

#[/] 如果认证失败时改成根目录
[simr :/] #表示根目录(/opt/svndata/simr ),simr : 对应前面配置的realm = simr
@admin = rw #表示admin组对根目录有读写权限,r为读,w为写

[simr :/test] #表示test目录(/opt/svndata/simr/test)
@test = rw #表示test组对test目录有读写权限

1.1.5、启动,查看和停止SVN服务

svn默认的数据目录是/var/svn,因为改了数据目录,所以直接以 systemctl 启动会报错。有两种方式启动:

1、以命令行的方式启动

svnserve -dr /opt/svndata

-d : 守护进程 
-r : svn数据根目录

查看SVN服务:

ps aux | grep svnserve #默认端口为:3690

2、以 systemctl 的方式启动

需要先修改配置文件:

vi /usr/lib/systemd/system/svnserve.service

[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target

[Service]
User=micktiger
Group=home
Type=forking
EnvironmentFile=/etc/sysconfig/svnserve
ExecStart=/usr/bin/svnserve --daemon --pid-file=/opt/svndata/svnserve.pid $OPTIONS

[Install]
WantedBy=multi-user.target
vi /etc/sysconfig/svnserve

OPTIONS="-r /opt/svndata/simr"

直接启动:

systemctl start svnserve

1.1.6、配置防火墙端口

CentOS7的默认防火墙为firewallD。subversion的默认端口为3690,如果没有打开会报错:

firewall-cmd --permanent --zone=public --add-port=3690/tcp

1.1.7、如果selinux权限错误

如果服务器开启了selinux,因为更改了数据目录,启动会报权限错误。执行:

chcon -R -h -t httpd_sys_content_t /DATA/svndata

1.2、docker安装

命令

docker run -d \
--restart always \
--name svn \
-v /opt/svn/data:/var/opt/svn \
-p 3690:3690 \
garethflowers/svn-server

创建svn

进入容器
docker exec -it svn-server /bin/sh
创建svn库
svnadmin create repo
创建成功后生成repo目录,进入该目录下的conf配置文件夹。有以下几个文件authz, passwd, svnserve.conf
authz 是权限控制,可以设置哪些用户可以访问哪些目录,
passwd是设置用户和密码的
svnserve是设置svn相关的操作
配置passwd文件 
vi passwd
配置authz
vi authz
第一种,以用户组的方式配置,一个组下可以有多个用户,例如
[groups]
admin = zhangsan,lisi
[/] 
@amdin = rw
[repo:/]
这里的意思就是admin这个组下存在zhangsan,lisi两个账户,[/]表示根目录,@admin表示给组设置根所有仓库的rw(读写)权限,给   组设置权限必须用@符号 ,[/] 代表所有仓库, [repo:/] 代表用户在repo 仓库的所有目录有相应权限,这里根据自己需求设计!
  第二种,直接给用户设置权限
  [/]
lisi = rw
编辑svnserve,找到 [general] 节点,加入以下内容
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = /var/opt/repo/svn
退出容器,重启容器

 

2、svn数据迁移

把一台服务器的svn数据库迁移到另外一台服务器上,优先保障两台服务器的svn版本号一致。事先安装好目标服务器svn服务,并创建好版本库(完成 svnadmin create /opt/svndata/simr 操作)。

svn数据迁移有三种方式:svnadmin dump 、svnadmin hotcopy、svnsync。当数据量比较小的时候,优先采用第一种方案。

2.1、svnadmin dump 迁移数据

命令说明:

svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental] > file

svnadmin dump命令用于导出整个Repository或Repository下的某个范围的修订版本。
REPOS_PATH 是版本库的路径,
[-r LOWER[:UPPER]] 用于指定导出的修订版本范围,由参数-r和两个用:号隔开阿拉伯数字组成。
例如:-r 0:50表示导出才版本0到版本50之间的所有修订版,-r是revision的缩写。
--incremental 它使用增量方式来导出版本,即每次都只导出自上一个版本以来的修改。
这样的好处是第一:可以把一个大的文 件切分成若干个小的文件。第二:在版本库已经存在的情况下,我们只需要每次导出修改的部分,不需要每次都导出整个版本库的内容。甚至可以通过hook脚本 每天晚上自动将当天的修改dump出来做备份用。

1、备份源svn数据

svnadmin dump /DATA/svndata/simr > simr_dump

2、把simr_dump拷贝到目标服务器
3、把simr_dump数据恢复到目标svn库

svnadmin load /DATA/svndata/simr < simr_dump

4、启动svn、正常使用

另外:

# 查看最新的版本号
svnlook youngest /DATA/svndata/simr

# 只备份745--755之间的版本
svnadmin dump /DATA/svndata/simr -r 745:755 > d:/repo_dump_745_755.dmp

参考:
$svnadmin dump myrepos –r 23 >rev-23.dumpfile //将version23导出
$svnadmin dump myrepos –r 100:200 >rev-100-200.dumpfile //将version100~200导出

对比较大的库可以分解成几个文件导出,便于备份
$svnadmin dump myrepos –r 0:1000 >0-1000.dumpfile
$svnadmin dump myrepos –r 1001:2000 --incremental >1001-2000.dumpfile
$svnadmin dump myrepos –r 2001:3000 --incremental >2001:3000.dumpfile

在导入时,可以将这几个备份文件装载到一个新的版本库中
$svnadmin load myrepos < 0-1000.dumpfile
$svnadmin load myrepos < 1001-2000.dumpfile
$svnadmin load myrepos < 2001:3000.dumpfile