VisualSVN Server 仓库迁移到 Linux,包含所有版本, 权限,用户信息。
在 Windows 上常常是用 VisualSVN Server 作 SVN 服务的,Linux 上是编译安装的 subversion 1.7.7。Windows 的 SVN 仓库在 E:\SVNRepositories,Linux 在 /data/svnrepos。
安装 svn 服务器:
sudo apt-get install subversion
第一步,导出 VisualSVN 仓库:
svnadmin dump E:\SVNRepositories\repo1 E:\repo1.dump
注意:在执行该命令之前,先确定 dump 是否安装,如果没有安装,则安装命令:
sudo apt-get install dump
注意:repo1 目录,是一个含有 format 文件的目录,也就是一个 a Subversion repository,如果有多个repository,就压缩多个。
第二步,在 Linux 端 create 相同名称的仓库:
svnadmin create /data/svnrepos/repo1
注意:执行该命令,在文件目录下的效果就是一个 repository,并创建相应的文件。
第三步,在 Linux 端 load Windows 导出的库:
cd /data/svnrepos
svnadmin load repo1 < repo1.dump
到此为止,repo1 库就导入到 Linux 的 subversion 中了,但是用户信息、权限信息还没导入。
第四步,把 E:\SVNRepositories\authz 上传到 /data/svnrepos,把 E:\SVNRepositories\htpasswd 复制为 passwd 并修改后上传到 /data/svnrepos,修改后的 passwd 格式如下(其实就是用户名 = 密码):
[users]
user1 = 123
user2 = 456
第五步,修改仓库的 /conf/svnserve.conf,使它指向第四步上传的那两个文件:
[general]
anon-access = none
auth-access = write
password-db = ../../passwd
authz-db = ../../authz
到这里就完成了,用命令 svnserve -d -r /data/svnrepos/ 启动 subversion 服务。
这样做还有个问题是 passwd 文件原密码信息全丢失了,由于 windows 下使用的 apache 的密码文件,密码使用的 MD5 加密的,而在 Linux 下 svn 的 passwd 文件的密码是明文形式保存的。所以原来的 MD5 密码将不可使用。
我只用了 repo1 这个仓库,如果有多个仓库一样步骤,分别导出导入,并修改仓库的 /conf/svnserve.conf 如果按照上述方法操作还是不行,启动 svnserve 时用 --log-file ./log.txt 参数查看错误信息。
测试:在浏览器里打开:127.0.0.1:3690,如果出现:
( success ( 2 2 ( ) ( edit-pipeline svndiff1 absent-entries commit-revprops depth log-revprops atomic-revprops partial-replay inherited-props ephemeral-txnprops file-revs-reverse ) ) )
说明服务开启成功!