SVN迁移至Linux服务器实录&钩子Dump实现自动备份

吾志所向,一往无前,愈挫愈勇,再接再厉!

——Ⅴ主宰

实现目标:VisualSVN 迁移到Linux Subvesion 服务器

1、Linux安装Subversion,小V使用是CentOS系统,直接使用yum安装。

2、Linux创建SVN目录,如:/data/svn (命令为:mkdir -p /data/svn)

3、创建完成后直接启动SVN服务:svnserve -d -r /data/svn

可指定自定义日志文件,添加启动参数:--log-file=svn.log

4、目录规划,为方便统一管理多项目,SVN目录规划如下:

其中bin存放一些脚本工具,比如后面会讲到的Dump自动备份,conf目录存放passwd&authz文件,分别为SVN全局用户、密码配置,及仓库访问权限配置,

dumps为SVN钩子dump备份后文件存放目录,msvn目录下则对应具体的项目仓库。其余三个文件为封装好的SVN停止、启动脚本及SVN操作日志。

5、创建项目仓库:(命令为:svnadmin create /data/svn/msvn/mjava)

至此。Linux机器上的工作完成大半。

6、Windows机器,执行Dump命令,获取项目所有版本包括提交记录及备注,然后上传SVN,导入Linux SVN服务器

对应命令为(项目名称为majva):svnadmin dump mjava > mjava.dump

此过程可能会遇到很多问题,小V在导出其中一个项目时便不幸遇上了,不知何原因,印象中也未更换过SVN版本,但执行Dump导出时报错,比如:

亦或:

折腾了好久,可惜最终也未能找到解决办法,无奈只能抛弃以往提交历史。(幸好主项目导出很顺利),此处尝试过的办法包括但不限以下几种:

* SVN完全备份(svnadmin hotcopy mjava1),然后对mava1项目进行dump导出。

* Dump增量备份(svnadmin dump mjava -r 版本号 > mjava.dump)

或(svnadmin dump mjava -r 版本号区间 > mjava.dump)

或(svnadmin dump mjava -r 版本号 --incremental > mjava.dump)。

--incremental 为增量备份模式,只导出指定版本修改的内容,此种方式可以快速备份导出版本文件。后面将要讲到的便是通过此种方式来实现Hook钩子自动备份。

7、Dump备份文件上传Linux服务器,并执行如下命令,导入项目文件至Linux SVN服务器中:

svnadmin load /data/svn/msvn/mjava

8、上述命令执行完成后,未配置用户及权限前项目仓库是任何人都拥有只读权限的,可以访问如下网址进行验证导入结果(SVN启动未指定端口情况下,默认端口为:3690):

svn://ip/msvn/mjava

如果更改过SVN端口,且又忘记端口号,可通过如下命令查询:

ps -ef |grep svn,获取pid,然后netstat -anp |grep $pid,即可查看到监听中端口

9、设置用户及权限

细心朋友可能会发现,执行svnadmin create命令后在每个工程仓库下面都会默认附带有一个conf目录,其中包括authz、passwd、svnserve.conf几个配置文件。其中svnserve.conf文件必不可少,其中需要指定仓库访问权限方式,及用户、权限配置文件路径等。如下

这里,小V未使用默认用户及权限配置文件,而采取多项目共享配置的方式,以减少用户的重复配置,用户的配置比较好理解,这里不做讲解,按照默认提供的passwd文件样例增加“用户名 = 密码” 即可。

这里可能会有疑惑的是authz文件配置,如下配置中,首先会添加两个用户组(groups节点)mjava及mandroid,其中mjava包涵aa、bb两个用户,mandroid用户组包涵aa、cc两个用户,至于aa、bb、cc三个用户及用户密码需要在passwd文件中配置。

mjava文件访问权限:mjava用户组用户拥有读写权限,其它无权限访问

mandroid文件访问权限:mandroid用户组用户拥有读写权限,cc用户只拥有读权限,其它用户无权访问。

如上配置中,关于仓库位置表示比较踩坑,小V便在这儿折腾了好一会儿。比如我们启动命令为“svnserve -d -r /data/svn”,那么/目录则代表即是/data/svn目录。如上配置中[msvn/mjava:/]意思为mjava项目的根目录(经过测试,多项目时,这种是唯一的表示方式,如[/msvn/mjava:/]或[/msvn/mjava]均为错误写法,这样配置客户端无法正常访问到项目文件。另外[/]这种配置可以访问,但多项目时,无法做到各项目权限分开配置)。当然这里也可以将目录权限分配的更细:[msvn/mjava:/branches/trunk],表示mjava项目的/branches/trunk目录权限。

文件保存,配置立即生效,无需重启SVN服务!至此,迁移工作全部完成。

最后总结一下SVN Server端常用命令:

* 启动SVN:svnserve -d -r {SVN目录} [--log-file={日志文件位置}]

* 停止SVN:killall svnserve (或者通过PS命令找出PID,然后kill)

* 创建项目仓库:svnadmin create {项目名仓库名称}

* 导入备份文件到项目仓库:svnadmin load {项目名}

* 备份项目文件:

- svnadmin hostcopy (热备份,相当于拷贝项目文件夹)

- svnadmin dump {项目名} > {备份文件名} (备份所有version)

- svnadmin dump -r {Version} --incremental {项目名} > {备份文件名} (增量备份Version版本)

扫扫加关注,小Ⅴ帮带路!

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180527G1HU6Z00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券