从 Windows 迁移 SVN 数据到 Debian

原先的一台 Windows 云主机快到期了,鉴于是国内的主机,想挂一些东西上去又想省事不去做域名备案。

于是重新买了一台海外的主机,用的是 Debian 系统。挂好了东西,顺便把原先的一些数据迁移过去。

在迁移 SVN 数据时发现从 Windows 迁移到 Debian 比单纯的 Windows 迁移还是差异,故在此记录一下迁移过程。


旧主机操作系统和软件:

Windows 2012 R2 / VisualSVN Server 3.5.4


新主机操作系统和软件:

Debian 7.0(wheezy) / svnserve version 1.6.17


服务器数据导出/导入

从旧主机导出 SVN 数据,打开系统命令行,执行如下命令:

svnadmin dump D:/Repositories/project_old > D:/project_old.dump

新主机安装 SVN 服务器及工具,执行命令:

apt-get install subversion subversion-tools

安装完毕后,创建 SVN 仓库目录,并启动 SVN 服务:

mkdir /data/svn/repos

svnserve -d -r /data/svn/repos

创建项目仓库:

svnadmin create project_new

仓库创建成功后,可以在目录 /data/svn/repos 中看到其子目录 project_new。新仓库名称可以和旧仓库相同,也可以不相同。

上传文件 project_old.dump 到新主机目录 /data/svn/repos 准备导入。


执行导入命令导入旧主机仓库数据:

svnadmin load project_new < /data/svn/repos/project_old.dump

等数据导入成功,迁移工作的第一阶段就完成了。


服务器权限配置

  1. 进入新仓库配置目录 /data/svn/repos/project_new/conf,打开文件 passwd,添加旧仓库中用户名和密码到文件中,保存退出。(此处以用户名/密码登录方式为例。密码为明文,否则会导致操作完成后客户端登录失败!

  2. 打开旧仓库 project_old/conf 目录中的 VisualSVN-SvnAuthz.ini 文件,复制其中的配置内容。

  3. 打开新仓库配置目录中的 authz 文件,把从 VisualSVN-SvnAuthz.ini 文件中复制的配置内容粘贴到 authz 文件最底部,保存退出。

  4. 打开新仓库配置目录中的 svnserve.conf 文件,添加配置如下:

anon-access = none

auth-access = write

password-db = passwd

authz-db = authz

至此,服务器端数据迁移工作完成。


客户端重定向

回到客户端,在 SVN 仓库根目录下进行重定向(Relocate),地址指向:

svn://servername/project_new

连接成功后,会弹出帐号密码输入框要求输入,正确输入并点确定后,即可正常连接 SVN 服务器进行操作。


需要注意的地方

  • 如果是 Windows 系统间的 VisualSVN Server 数据迁移就很简单,可以通过直接复制整个仓库数据到新服务器仓库来实现。

  • 但是从 Windows 迁移到 Debian 则需要通过导出/导入数据的方式处理,故用户权限的配置需要注意。涉及到用户权限配置的主要是仓库目录下 conf 目录中的 passwdauthz 两个文件。

  • 其中 passwd 文件用于项目帐号和密码管理,authz 文件用于管理项目用户/用户组权限,控制整个项目仓库的文档访问权限。

  • 与之对应的,Windows VisualSVN Server 的帐号密码和用户/用户权限管理,分别是仓库根目录下的 htpasswd 文件和项目仓库目录下 conf 目录中的 VisualSVN-SvnAuthz.ini 文件。差别在于,htpasswd 文件中放的用户密码为密文。

  • 项目仓库目录下 conf 目录中的 svnserve.conf,在 Windows VisualSVN Server 中并没有用到,但是在 Debian 中用于管理上述文件的指向配置以及匿名操作控制。所以在迁移到 Debian 的最后配置中需要对 svnserve.conf 进行修改,以便 SVN 服务器能够找到项目对应的 passwdauthz 文件以及知道匿名操作控制。