如何将SVN仓库迁移到新服务器

40

我们希望将两台服务器合并在一起,为此我们需要在“新”服务器上安装SVN,并将我们在“旧”服务器上设置的所有存储库移动到新服务器上。

这个操作容易吗?可能可以使用TortoiseSVN提供的“Relocate”选项来完成。最佳方法是什么?

这是否是重新组织存储库设置的好时机?


这里是关于“重定位”(Relocate)的文档,旨在帮助您的工作副本找到已移动的存储库。右键菜单选项仅会出现在工作副本根目录中。 - veeTrain
4个回答

66
您可以使用svnadmin dump功能来迁移存储库。在SVN服务器上,键入svnadmin dump /absolute/path/to/the/repo > /tmp/repo.svndump。这将导出整个存储库到系统临时目录中的文本文件中,并将其命名为“repo.svndump”。在将其传输到新服务器之前,您可能需要压缩该文件。
一旦您导出了存储库,就可以像这样将转储文件传输到新服务器并将其导入:svnadmin load /absolute/path/to/the/**new**/repo < repo.svndump
有关更多信息,请参见“svnadmin dump”和“svnadmin load”。
转储存储库并在新服务器上加载后,您需要使用--relocate命令将本地副本切换到新服务器。 注意:如果您的存储库使用任何externals,则可能会遇到一些问题。请参见我在Server Fault上的问题,了解详情。

我已经尝试过了,但是现在出现了一个错误信息:svn: E175002: Commit failed (details follow): svn: E175002: PROPFIND of '/Project/Project/src/dashboards/BasicLineGraph.java': 500 Internal Server Error (http://www.domain.com)。我正在努力解决这个问题,但是重新安装了多次,仍然无效。 - ryvantage
16
对于大多数人来说,这可能是一个不用费脑子的事情,但在成功加载转储文件之前,我必须先创建新的“repo”。 - Appulus
1
@Appulus 最好将其添加到答案中,我个人认为。 - Jonny
“--relocate” 是一个命令吗?还是你的意思是 “svn relocate”? - Per Lindberg

5
如果新服务器使用相同的操作系统,则可以将整个存储库文件夹复制到新服务器,无需转储和重新加载。
relocate命令允许您将工作副本指向新服务器,即它不会帮助您移动存储库,只是避免了进行全新的checkout。
外部依赖可能会出现问题,但不一定。如果外部存储库位于同一服务器上,则可能使用相对URL指定了外部依赖。如果新服务器使用相同的结构,则应该一切正常。

2
如果您使用的是曾经默认的伯克利数据库后端,则绝对必须采用转储和恢复方法,否则痛苦就不值得了。 - Arafangion

2

CLONE-SVN2SVN

如果使用svnadmin dump不可行,您可以使用clone-svn2svn bash脚本。它可以将一个SVN目录复制到另一个SVN站点,并保留完整或部分修订历史记录。以下是主要的命令行参数。您还可以设置从哪个版本开始复制历史记录。

clone-svn2svn.sh <source-svn-url> <destination-svn-url>

要求

这个脚本需要使用Bash和Git才能正常工作。如果您使用的是Windows或其他平台,请从git-scm网站下载它们。这是一个包含bash的git安装程序。

细节

该脚本使用git-svn将源SVN历史记录下载到临时git存储库中,并将历史记录上传到目标SVN存储库。

缺点

在目标存储库中,作者的修订版本将是运行脚本的用户(即您自己)。但每个修订消息都会有一行额外的信息指定原始作者,所以并不太糟糕。


0
这是重新组织存储库设置的好时机吗?
正是做这件事的完美时机,因为在将其迁移到新服务器时,您必须将存储库关闭。

该仓库当前没有分支/主干/标签结构。 - Joe Phillips
分支/主干/标签只是Subversion世界中的一种逻辑组织方式。它与仓库位置无关,最好在迁移之前或之后完成。 - Jonny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接