搭建使用

背景

项目开发中需要版本控制,而我们经常使用的是在windows系统上搭建svn服务器,下面介绍在Linux系统(CentOS 7.3.1611)上搭建svn服务器。

使用yum安装svn

使用yum安装svn,命令如下:

1
yum -y install subversion

安装完成之后,验证svn安装是否成功

1
svn help

若需查看svn安装位置,可以用以下命令

1
rpm -ql subversion

新建仓库目录

在/opt目录下面创建一个svn目录,用来作为svn存储目录,命令如下:

1
mkdir  /opt/svn

创建一个测试仓库

执行如下命令,创建一个仓库

1
svnadmin create /opt/svn/test/

进入仓库目录下,查看仓库的文件,命令:

1
2
cd /opt/svn/test/ #进入仓库目录
ls #展示仓库文件

关于仓库文件的说明:

hooks目录:放置hook脚步文件的目录
locks目录:用来放置subversion的db锁文件和db_logs锁文件的目录,用来追踪存取文件库的客户端
format目录:是一个文本文件,里边只放了一个整数,表示当前文件库配置的版本号
conf目录:是这个仓库配置文件(仓库用户访问账户,权限)

配置SVN服务的配置文件svnserve.conf

进入到conf文件夹下面,编辑svnserve.conf文件,命令如下:

1
2
3
cd conf
ls
vim svnserver.conf

在svnserver.conf文件中

  1. anon-access前面的注释去掉,将对应的值设置为none
  2. auth-access前面的注释也去掉
  3. password-db前面的注释也去掉
  4. authz-db前面的注释也去掉
  5. realm = /var/svn:指定认证域,即 /var/svn 目录 ,显示如下:

最重要的一点,去掉注释之后,配置项前面不能有空格

配置访问的用户及密码

编辑passwd文件,在文件的末尾加上自己需要添加的用户名和密码,显示如图:

1
vim passwd

注意:用户和密码都是明文显示的

配置新用户的授权访问的文件

编辑authz文件,在该文件中追加如下内容:

1
2
3
4
5
vim authz

# 添加内容
[/]
flytzuhan=rw

防火墙3690端口开启

1
2
3
4
5
6
# 显示防火墙应用列表
firewall-cmd --list-all
# 加入3690端口
firewall-cmd --zone=public --add-port=3690/tcp --permanent
# 重启防火墙
systemctl restart firewalld

启动svn服务

执行如下命令:

1
svnserve -d -r /opt/svn/

其中-d表示后台运行, -r指定根目录,这里需要注意:绝对不能将启动命令写成:svnserve -d -r /opt/svn/test/

还有启动的时候可能会出现如下错误:svnserve: E000098: Can't bind server socket: Address already in use

这个是由于已经启动了SVN服务,所以需要先关闭进程,重新启动即可,命令如下:

1
2
killall svnserve
svnserve -d -r /opt/svn/

设置svn开机自启动

安装好 svn 服务后,默认是没有随系统启动自动启动的, CentOS 7 的 /etc/rc.d/rc.local 是没有执行权限的, 系统【建议】创建 systemd service 启动服务

于是查看 systemd 里 svn 的配置文件 /lib/systemd/system/svnserve.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vi /lib/systemd/system/svnserve.service

# 以下是输出
[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/svnserve
ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid $OPTIONS

[Install]
WantedBy=multi-user.target

找到 svn 的 [service] 配置文件 /etc/sysconfig/svnserve 编辑配置文件

1
vi /etc/sysconfig/svnserve

OPTIONS="-r /var/svn" 改为 svn 版本库存放的目录(OPTIONS="-r /opt/svn")

  • 启动服务

    1
    systemctl start svnserve
  • 开启启动

    1
    systemctl enable svnserve
  • 查看服务列表状态

    1
    systemctl list-units --type=service

windows系统拉取代码

可以在图形化界面中输入:svn://你的IP(公网)/test或者svn://你的IP(公网):3690/test链接svn

然后你就可以愉快的使用了~~~

迁移备份

SVN备份方式对比分析

一般采用三种方式:

1
2
3
4
5
6
# 未使用
1、svnadmin dump
# 推荐
2、svnadmin hotcopy
# 未使用
3、svnsync

注意,svn备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),如copy、rsync命令。 曾经用rsync命令来做增量和全量备份,在季度备份检查审计中,发现备份出来的库大部分都不可用,因此最好是用svn本身提供的功能来进行备份。

优缺点分析and实现

第一种

svnadmin dump是官方推荐的备份方式
优点是:比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。
缺点是:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复。
个人建议在版本数比较小的情况下使用这种备份方式。

未测…

第二种

svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份;
优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。
缺点是:比较耗费硬盘,需要有较大的硬盘支持(俺的备份机有1TB空间,呵呵)。

备份:

1
svnadmin hotcopy /opt/svn/sound-code/ /opt/svn/sound-code_bak --clean-logs

如果你传递–clean-logs选项,svnadmin会执行热拷贝操作,然后删除不用的Berkeley DB日志文件。 你可以在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。

还原:

1
svnadmin hotcopy /opt/svn/sound-code_bak/ /opt/svn/sound-code/

更换服务器怎么破?

将上面备份的文件拷贝到目标服务器 => 执行还原命令 => 在目标服务器安装SVN(参考搭建使用

第三种

svnsync实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。不过,必须svn1.4版本以上才支持这个功能。
优点是:当制作成2个镜像库的时候起到双机实时备份的作用;
缺点是:当作为2个镜像库使用时,没办法做到“想完全抛弃今天的修改恢复到昨晚的样子”;而当作为普通备份机制每日备份时,操作又较前2种方法麻烦。

未测…