搭建使用
背景
项目开发中需要版本控制,而我们经常使用的是在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 | cd /opt/svn/test/ #进入仓库目录 |
关于仓库文件的说明:
hooks目录:放置hook脚步文件的目录
locks目录:用来放置subversion的db锁文件和db_logs锁文件的目录,用来追踪存取文件库的客户端
format目录:是一个文本文件,里边只放了一个整数,表示当前文件库配置的版本号
conf目录:是这个仓库配置文件(仓库用户访问账户,权限)
配置SVN服务的配置文件svnserve.conf
进入到conf文件夹下面,编辑svnserve.conf文件,命令如下:
1 | cd conf |
在svnserver.conf文件中
- anon-access前面的注释去掉,将对应的值设置为
none
- auth-access前面的注释也去掉
- password-db前面的注释也去掉
- authz-db前面的注释也去掉
- realm =
/var/svn
:指定认证域,即 /var/svn 目录 ,显示如下:
最重要的一点,去掉注释之后,配置项前面不能有空格。
配置访问的用户及密码
编辑passwd文件,在文件的末尾加上自己需要添加的用户名和密码,显示如图:
1 | vim passwd |
注意:用户和密码都是明文显示的
配置新用户的授权访问的文件
编辑authz文件,在该文件中追加如下内容:
1 | vim authz |
防火墙3690端口
开启
1 | # 显示防火墙应用列表 |
启动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 | killall svnserve |
设置svn开机自启动
安装好 svn 服务后,默认是没有随系统启动自动启动的, CentOS 7 的 /etc/rc.d/rc.local 是没有执行权限的, 系统【建议】创建 systemd service 启动服务
于是查看 systemd 里 svn 的配置文件 /lib/systemd/system/svnserve.service
1 | vi /lib/systemd/system/svnserve.service |
找到 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 | # 未使用 |
注意,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种方法麻烦。
未测…