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
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导出时报错,比如:
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文件必不可少,其中需要指定仓库访问权限方式,及用户、权限配置文件路径等。如下
这里,小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实现自动备份的主要内容,如果未能解决你的问题,请参考以下文章