更改SVN存储库URL


116

我当前的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

Answers:


208

鉴于Apache Subversion服务器将被移到这个新的DNS别名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

36
1.7版之前不提供svn relocate。对于1.7之前的版本,您可以使用svn switch --relocate OLD NEW
ColinM

附加的TortoiseSVN链接非常有帮助,非常感谢
MOnsDaR 2014年

我不知道该switch命令,我在网上找到的所有文档都是针对较新版本的。
达斯汀·库克

当我需要从+ ssh URL迁移到非SSH或反之时,这非常方便,例如:svn switch --relocate svn + ssh:// _ svn_server _ / _ svn_project _ / _ svn_branch_ svn:// _ svn_server _ / _ svn_project _ / __ svn_。如果您使用Jenkins API在多个节点上以svn + ssh的形式进行自动检出,并且其中一些(Windows节点)没有SSH,但是最后一个功能特别有用,但是您需要登录到构建计算机并手动“ svn更新”以测试一些快速修复。
亚历山大·萨莫洛夫

11

在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

最后,增加了上述情况,如果你的资料库网址变更还涉及协议的变化,你可能需要先陈述网址后(也见这里

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

5

在我的情况下,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,然后将rootuuid列值更改为新值。您可以通过发出找到新存储库的UUID svn info NEW_SERVER

同样,将此作为最后的方法。


@IgorGanapolsky:您能更具体一点吗?
马丁·佩卡

1
如果您仔细阅读了我的文章,我建议您不要运行任何命令。我建议编辑SQLite数据库。
马丁·佩卡

但是,编辑SQLite DB涉及运行命令。SQL命令。
彼得·弗林

事实证明,您不能使用sqlite。您必须按照建议使用sqlitebrowser。奇怪的。
彼得·弗林

1

如果您要提交新的空仓库,您可以签出新的空仓库并提交到新的远程仓库。
检查一个新的空Repo不会删除您的本地文件。
试试这个: 例如,远程仓库URL: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"


这将对历史产生什么影响?
MattBianco
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.