如何导出(然后导入)Subversion存储库?

时间:2020-03-05 18:49:16  来源:igfitidea点击:

我即将结束一个使用商业SVN提供程序存储源代码的项目。客户最终选择的Web主机将一个存储库作为托管软件包的一部分,因此,既然项目结束了,我想将存储库重新定位到他们的Web主机并终止商业帐户。

我将如何去做呢?

解决方案

回答

假设我们具有运行svnadmin所需的特权,则需要使用dump和load命令。

回答

做到这一点的工具是

svnadmin dump

但是,要使其正常工作,我们需要对存储库的文件系统访问权限。并且一旦有了它(并提供了FSFS格式的存储库),就可以将存储库复制到新位置(如果是BDB格式,则强烈建议转储/加载)。

如果我们没有文件系统访问权限,则必须要求存储库提供者为我们提供转储(并让他们删除其存储库并希望它们符合要求)

回答

我们可能会在第5章中找到有关迁移SVN库的帮助。

这种方法需要访问svnadmin。

回答

如果要移动存储库并保留历史记录,则可能需要在两个主机上都具有文件系统访问权限。如果后端是FSFS(最新版本中的默认设置),则最简单的解决方案是制作整个存储库文件夹的文件系统副本。

如果我们拥有Berkley DB后端,或者不确定后端是什么,或者我们要更改SVN版本号,则需要使用svnadmin来转储旧存储库并将其加载到新存储库中资料库。使用svnadmin dump将为我们提供单个文件备份,我们可以将其复制到新系统。然后,我们可以创建新的(空的)存储库并使用" svnadmin load",这实际上将重播所有提交及其元数据(作者,时间戳等)。

我们可以在此处阅读有关转储/加载过程的更多信息:

http://svnbook.red-bean.com/en/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate

另外,如果我们执行svnadmin load,请确保使用--force-uuid选项,否则人们在切换到新存储库时会遇到问题。 Subversion使用UUID在内部标识存储库,它不允许我们将工作副本切换到其他存储库。

如果我们没有文件系统访问权限,则可能还有其他第三方选项(或者我们可以写一些东西)来迁移:本质上,我们必须使用svn日志在新存储库中重播每个修订,并且然后修正元数据。我们需要适当地使用pre-revprop-change和post-revprop-change钩子脚本来执行此操作,这些脚本假定是文件系统访问权限,因此是YMMV。或者,如果我们不想保留历史记录,则可以使用工作副本导入新的存储库。但是希望事实并非如此。

回答

我们也可以使用svnadmin hotcopy命令:

svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH

它需要从存储库进行完整备份,包括所有挂钩,配置文件等。

SVN Book上的更多内容

回答

摘自我的博客笔记
现在我们可以导入转储文件,例如如果要在机器/ Subversion版本之间迁移。例如如果我已经从源存储库创建了转储文件,并将其加载到新存储库中,如下所示。

CmdShell> svnadmin dump D:\CoderZone2\svn-repos > ReposDump.dmp
CmdShell> svnadmin load D:\CoderZone\svn-repos < ReposDump.dmp

回答

我们也可以使用svnsync。这仅需要对源存储库进行只读访问

svnbook上的更多内容

回答

如果我们没有对该存储库的文件访问权限,我更喜欢使用rsvndump(远程Subversion存储库转储)来制作转储文件。