更改 SVN 存储库 URL

我目前的 SVN 结构:

Path: .
URL: svn://someaddress.com.tr/project
Repository Root: svn://someaddress.com.tr
Repository UUID: -------------------------------------
Revision: 10297
Node Kind: directory
Schedule: normal
Last Changed Author: ----
Last Changed Rev: 9812
Last Changed Date: 2010-12-20 17:38:48 +0100 (Mon, 20 Dec 2010)

但是我们的项目(因此 SVN 服务)将通过 sub.someaddress.com.tr而不是 someaddress.com.tr工作( someaddress.com.tr 将很快被重定向到其他地方)。

因为它是开发服务器,所以我不能确定要做什么。我需要使用 svn switch还是 svn switch --relocate?还有,我需要切换 svn 根 Someaddress.com.tr还是项目分支 Someaddress.com.tr/project

194683 次浏览

鉴于 Subversion 服务器将迁移到这个新的域名解析服务器别名: sub.someaddress.com.tr:

  • 对于 Subversion 1.7或更高版本,请使用 svn relocate。当 SVN 服务器的位置更改时使用重新定位。仅当您想要将本地工作副本更改为另一个分支或另一个路径时,才使用 switch。如果使用 TortoiseSVN,您可以按照 TortoiseSVN 手册中的说明操作。如果使用 SVN 命令行接口,请参考 SVN 文档的这一部分。命令应该是这样的:

    svn relocate svn://sub.someaddress.com.tr/project

  • 考虑到存储库的实际内容可能不会更改,因此继续使用 /project

注意: svn relocate在1.7版本之前是不可用的(感谢 ColinM 提供的信息):

    svn switch --relocate OLD NEW

在我的例子中,svn relocate命令(以及 svn switch --relocate)由于某种原因而失败(可能是回购没有被正确移动,或者其他原因)。我面对着这个错误:

$ svn relocate NEW_SERVER
svn: E195009: The repository at 'NEW_SERVER' has uuid 'e7500204-160a-403c-b4b6-6bc4f25883ea', but the WC has '3a8c444c-5998-40fb-8cb3-409b74712e46'

我不想重新下载整个存储库,所以我找到了一个变通方法。它在我的情况下工作,但通常我可以想象很多事情可以得到破坏(所以要么备份您的工作副本,或准备重新检出整个回购,如果出现问题)。

回购地址及其 UUID 保存在工作副本中的 .svn/wc.db SQLite 数据库文件中。只需打开数据库(例如,在 SQLite Browser 中) ,浏览表 REPOSITORY,并将 rootuuid列值更改为新的值。您可以通过发出 svn info NEW_SERVER来找到新回购的 UUID。

同样,把这当作最后的手段。

前后浏览网址可能会让你心情平静:

svn info | grep URL


URL: svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
Relative URL: (...doesn't matter...)

并检查您的版本(> 1.7)以确保 svn relocate是正确使用的:

svn --version

最后,如果您的存储库的 url 更改也涉及到协议的更改,那么您可能需要在 url (也是 看这里)之后声明 还有之前

svn relocate svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
https://svngate.mycompany.org/svn/repos/trunk/DataPortal

当然,一切都在一条线上。之后,感觉很好,一切都进行得很顺利:

svn info | grep URL:

如果你愿意,再自信一点,新的 svn 回购网址已经连接并正常工作了:

svn status --show-updates
svn diff

如果你想提交一个新的空回购,你可以签出新的空回购和提交新的远程回购。
签出一个新的空回购不会删除您的本地文件。
试试这个: 比如说, 远程回购网址: https://example.com/SVNTest Cd [您的项目路径] Rm-rf. svn Svn co https://example.com/svntest . ./[你的项目名称] Svn add./* Svn ci-m“更改回购网址”

如果您正在使用 TortoiseSVN 客户端,那么您可以遵循以下步骤

在源目录中右键单击,然后单击 重新定位Image#1

之后,你需要改变网址到你想要的,点击确定,它将需要几秒钟。Image#2

在 Eclipse 中,断开项目(Team > Disconnect)并删除元数据,然后将项目连接到新的存储库。 在项目上,右键单击,团队,断开连接 enter image description here

获得完整的命令行指令对我来说有点痛苦。@ Mahi 的建议是可行的,但我的目标是通过命令行实现自动化。以下是对我有效的方法:

svn relocate https://10.29.52.20/svn/src https://10.32.128.41/svn/src --non-interactive --username=myuser--password=mypass --trust-server-cert-failures=unknown-ca,cn-mismatch,expired,not-yet-valid,other w:/src
  • 第一个 Web 地址是“ FROM”或旧地址
  • 第二个网址是“ TO”或新地址。
  • 将您的 svn 用户名和密码替换为 myusermypass
  • 另一个棘手的部分是确保包含源代码路径... 在我的案例中是 w:/src