SVN切换重定位 - 不是仓库的根目录

21

我正在尝试将一个工作副本文件夹从旧的svn服务器移动到一个新的svn服务器,在新的svn服务器上该文件夹位于一个子文件夹中。使用以下重定位命令:

svn switch --relocate https://oldserver/svn/repos https://newserver/some/directory 

我得到:

svn: 'https://newserver/some/directory ' is not the root of the repository

哪个是正确的.....但问题是,我如何无论如何移动这个位置?

4个回答

15
据我所知,您无法使用svn switch(带或不带--relocate)来切换到一个新的存储库。可以这样想:您的新存储库的HEAD修订版本为x,旧存储库的修订版本为y,那么SVN应该如何处理工作副本的基本修订版本呢? svn help switch指出,--relocate用于:
  

仅重写工作副本URL元数据以反映语法更改。当存储库的根URL发生更改(例如方案或主机名更改),但您的工作副本仍反映 同一存储库中的相同目录。

由于这种情况并不适用,因此恐怕您需要执行全新的签出操作。

然而,我收到了错误提示,尽管它确实是在同一仓库内的相同目录... - Erik Aronesty
嗯,我不知道在过去的6年里是否有什么变化,而且我没有彻底研究细节,但我们刚刚将整个存储库“按原样”迁移到了新服务器,并且这个命令结构可以很好地“切换”现有的已检出工作文件夹以针对新的存储库进行工作:svn switch --relocate svn://oldserver/ http://newserver/svn/goteam/。即 - 新协议,新服务器,新文件夹规范。- 运行良好。也许SVN会检查相关的存储库是否基本相同,如果是,则允许使用? - spechter

2
我尝试了相同的操作,但在这种情况下,我使用 svnsync 在文件:url 中复制了一个副本,并使用 mv /home/me/sync/therepo /home/me/sync/repos/therepo 将其移动。
原因是:我在 sync 目录中有几个帮助脚本会混淆仓库的视图。
svn switch --relocate 大部分情况下都有效,但外部文件一直报错。
解决方法很暴力:我删除了(rm -rf)包含有问题文件的目录,然后再次运行 svn update 以重新获取外部文件。
至少这样我不必再次进行大量的 checkout。
此外,现在我可以为同事编写说明文档,以便我们将 svn 服务器迁移到新机器上时使用。

1

有可能发生的情况是你正在对根目录的子文件夹进行重新定位。

尝试在根文件夹上执行重新定位操作。所有子文件夹将自动重新定位。


0

好的,我假设您已经通过svnadmin dump/svnadmin load成功迁移了代码库,那么您可以尝试使用以下命令:svn switch --relocate https://newserver/some/directory 如果您仍然遇到相同的错误,可能需要重新svn co。我不记得曾经遇到过这个错误,但是我的所有代码库都使用像您要迁移的嵌套结构,所以我可能从未遇到过它 :-)


我的代码库太大了,不适合进行 svnadmin dump(其中包括二进制文件),所以我将其 svn co 到一个新目录中并提交了 svn commited。 - Jon Hadley
代码库被复制到多个位置(生产服务器、开发服务器、两台开发机等)。这是一个很大的代码库,我不想再次下载它——通过阅读 switch 的文档,似乎 switch 可以更改代码库使用的 URL。 - Jon Hadley

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