更改 SVN 存储库 URL

问题描述 投票:0回答:7

我当前的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 root someaddress.com.tr 或项目分支 someaddress.com.tr/project

svn svn-repository
7个回答
252
投票

鉴于 Apache Subversion 服务器将移动到这个新的 DNS 别名:

sub.someaddress.com.tr
:

  • 对于 Subversion 1.7 或更高版本,请使用

    svn relocate
    。当SVN服务器的位置发生变化时,将使用Relocate。仅当您要将本地工作副本更改为另一个分支或另一个路径时,才使用
    switch
    。如果使用 TortoiseSVN,您可以按照TortoiseSVN 手册中的说明进行操作。如果使用 SVN 命令行界面,请参阅 SVN 文档的这一部分。该命令应如下所示:

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

  • 继续使用

    /project
    ,因为您的存储库的实际内容可能不会改变。

注意:

svn relocate
在1.7版本之前不可用(感谢ColinM提供的信息)。在旧版本中,您将使用:

    svn switch --relocate OLD NEW

14
投票

Grepping 前后的 URL 可能会让你安心一些:

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 存储库 URL 已连接并正常工作:

svn status --show-updates
svn diff

12
投票

如果您使用TortoiseSVN客户端那么您可以按照以下步骤操作

右键单击源目录,然后单击 SVN Relocate

之后,您需要将URL更改为您想要的,单击确定,这将需要几秒钟的时间。


6
投票

就我而言,

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 浏览器中),浏览表 REPOSITORY,然后将
root
uuid
列值更改为新值。您可以通过发出
svn info NEW_SERVER
找到新存储库的 UUID。

再次将此视为最后的手段。


2
投票

获取完整的命令行指令对我来说有点痛苦。 @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
  • 第一个网址是“FROM”或旧地址
  • 第二个网址是“TO”或新地址。
  • 用您的 svn 用户名和密码代替
    myuser
    mypass
  • 另一个棘手的部分是确保包含源代码路径......在我的例子中是
    w:/src

1
投票

如果你想提交到一个新的空仓库,你可以签出新的空仓库并提交到新的远程仓库。
签出新的空存储库不会删除您的本地文件。
试试这个: 例如, 远程仓库网址:https://example.com/SVNTest


cd [YOUR PROJECT PATH]
rm -rf .svn
svn co https://example.com/SVNTest ../[YOUR PROJECT DIR NAME]
svn add ./*
svn ci -m"changed repo url"


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.