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

Posted V主宰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

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


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

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


其中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导出时报错,比如:

svnadmin: E160013: File not found: revision 1, path '/false /mjava'

亦或:

svnadmin: E160043: Found format '5', only created by unreleased dev builds; see http://subversion.apache.org/docs/release-notes/1.7#revprop-packing


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

* 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 < mjava.dump


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文件必不可少,其中需要指定仓库访问权限方式,及用户、权限配置文件路径等。如下
SVN迁移至Linux服务器实录&钩子Dump实现自动备份


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


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

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

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

[groups]

mjava = aa,bb

mandroid = aa,cc


[msvn/mjava:/]

@mjava = rw

* =


[msvn/mandroid:/]

@mandroid = rw

cc = r

* =


如上配置中,关于仓库位置表示比较踩坑,小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版本)      



               
               

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

以上是关于SVN迁移至Linux服务器实录&钩子Dump实现自动备份的主要内容,如果未能解决你的问题,请参考以下文章

windows下svn钩子实现每次提交更新至web目录

centos 6.8 设置svn钩子同步至web目录

SVN 服务器迁移

使用cvs2svn迁移cvs至svn

svn迁移至git指南

Linux自整理SVN搭建及与站点根目录实现钩子同步