【问题标题】:Change SVN repository URL更改 SVN 存储库 URL
【发布时间】:2012-12-06 07:45:40
【问题描述】:

我目前的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 switchsvn switch --relocate 吗?另外,我需要切换 svn root someaddress.com.tr 还是项目分支 someaddress.com.tr/project

【问题讨论】:

标签: svn svn-repository


【解决方案1】:

鉴于 Apache Subversion 服务器将被移动到这个新的 DNS 别名:sub.someaddress.com.tr

  • 对于 Subversion 1.7 或更高版本,使用 svn relocate。当 SVN 服务器的位置发生变化时使用重定位。 switch 仅在您想将本地工作副本更改为另一个分支或另一个路径时使用。如果使用 TortoiseSVN,您可以按照TortoiseSVN Manual 的说明进行操作。如果使用 SVN 命令行界面,请参考this section of SVN's documentation。该命令应如下所示:

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

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

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

    svn switch --relocate OLD NEW

【讨论】:

  • svn relocate 在 1.7 之前不可用。对于 1.7 之前的版本,您可以使用 svn switch --relocate OLD NEW
  • 额外的 TortoiseSVN 链接非常有帮助,谢谢
  • 不知道switch 命令我在网上找到的所有文档都是针对较新版本的。
  • 当我需要从 +ssh URL 重新定位到非 SSH 或反之亦然时,这很方便,例如:svn switch --relocate svn+ssh://_svn_server_/_svn_project_/_svn_branch_ svn:/ /_svn_server_/_svn_project_/_svn_branch_。如果您使用 Jenkins API 在多个节点上以 svn+ssh 的方式自动签出,并且其中一些节点(Windows 节点)没有 SSH,那么最后一个特别有用,但您需要登录到构建机器并手动“svn update”以测试一些快速修复。
【解决方案2】:

在我的例子中,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'

我不想重新下载整个存储库,所以我找到了解决方法。它在我的情况下有效,但通常我可以想象很多事情都会被破坏(所以要么备份你的工作副本,要么准备好在出现问题时重新检查整个 repo)。

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

同样,将此作为最后的手段。

【讨论】:

  • @IgorGanapolsky:你能说得更具体点吗?
  • 如果您仔细阅读我的帖子,我不建议您运行任何命令。我建议编辑 SQLite DB。
  • 但是编辑 SQLite DB 需要运行命令。 SQL 命令。
  • 原来你不能使用 sqlite;您必须按照建议使用 sqlitebrowser。很奇怪。
  • 我用 sqlite3 完成了它,它在我的情况下工作得很好。在终端: sqlite3 wc.db 然后: sqlite> update REPOSITORY set root='svn+ssh://192.168.0.20/var/svn-repos/myrepo' where id=1;使用 select * from REPOSITORY 检查您的值;
【解决方案3】:

在 URL 之前和之后标记 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 之前声明 (也可以是 see here )

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

当然都在一行中。之后,感觉很好,一切都很顺利:

svn info | grep URL:

如果你愿意,多一点自信,新的 svn repo URL 已连接并正常工作:

svn status --show-updates
svn diff

【讨论】:

    【解决方案4】:

    如果你想提交一个新的空仓库,你可以签出新的空仓库并提交到新的远程仓库。
    签出一个新的空仓库不会删除你的本地文件。
    试试这个: 例如, 远程回购网址: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"

    【讨论】:

    • 这会对历史产生什么影响?
    【解决方案5】:

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

    在源目录中右键点击SVN Relocate

    之后,你需要将 URL 更改为你想要的,点击确定,这将需要几秒钟。

    【讨论】:

      【解决方案6】:

      在 Eclipse 中,断开项目(团队 > 断开)并删除元数据,然后将项目连接到新存储库。 over the project, right clic, team, disconnect

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-04
        • 2012-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多