5

背景:DynDNS 现在开始要求每月登录一次以保持他们的免费帐户活跃(以前您只需每月更新一次 IP 地址)。我相信迟早我会忘记这样做并失去我的帐户。

我使用 mysvn.dyndns.org 访问服务器上的我的 subversion 存储库,(截至目前)也可以通过 svn.mydomain.com 访问。不幸的是,大多数项目还引用了也位于 mysvn.dyndns.org 的外部项目,我真的不想浏览所有项目(>100)并更改外部项目,因为这可能需要几个小时而且很容易出错.

有什么方法可以配置 Windows 或 subversion / TortoiseSVN 客户端将一个域重定向到另一个域?

例如:

https://mysvn.dyndns.org/svn/blablub

应该重定向到

https://svn.mydomain.com/svn/blablub

我知道我可以向主机添加一个条目以重定向到 IP 地址,但我更喜欢重定向到域名。

4

3 回答 3

5

你(真的)问了两个相关的问题:

  • 我可以重定向somename.domain.comanothername.somedomain.com吗?
  • SVN 客户端可以使用旧名称,但可以使用新主机吗?

简短的答案将是

  • 是的

更长的版本

要将旧主机名重定向到新主机名,您至少可以使用两种变体(最终结果相同)

  • 在 DNS 级别和 CNAME 记录,它将新名称别名为新名称:

somename.domain.com. IN CNAME anothername.somedomain.com

根据 somename 的请求,将使用来自 anothername 的数据进行回答

  • 在 Apache 的位置主机配置中,您可以将重定向添加到另一个名称 Apache 的

但是:它只适用于浏览器级别 - 当您尝试将此重定向位置用作任何 Subversion 命令的目标时,您将收到错误“存储库已移动,请重新定位”并且您必须将所有旧资源重新定位到新 URL。

给你的好消息

所有外部定义都写为源仓库中的 svn-properties,您可以获取这些外部(带有值)的列表并使用新值进行更新,并且此操作(理论上)可以自动化

svn propget -R svn:externals . > FILE在工作副本的根目录中获取外部

svn propset svn:externals --target FILE用于批量定义新的外部

于 2013-05-23T14:25:52.237 回答
2

我可以建议另一种方法吗?

假设您使用的是支持外部相对 URL的 svn 1.5 或更高版本,遵循此问题中的一种方法将所有外部更改为相对将解决更基本的问题。

如果它们不都是相对 URL,您可以使用类似的脚本将它们从 server1 更改为 server2。这是在服务器迁移期间例行完成的。假设您保留了良好的备份,这可能是一种可以让您一次性解决所有痛苦而不是随着时间推迟的方法。

于 2013-05-24T13:40:24.103 回答
0

显然没有像我想象的那么简单的解决方案。我最终编写了一个基于 Version Insight 源代码的小型 Delphi 程序,该程序更改了所有签出到给定目录的子目录中的项目的外部内容并提交了这些更改。然后我使用 svn relocate 命令重新定位项目本身。

@rem calls svn relocate for all directories
@echo off

for /d %%i in (*) do call :HandleDir %%i
pause
goto :eof

:HandleDir
echo *** handling dir %1

svn relocate --ignore-externals https://mysvn.dyndns.org/svn/ https://svn.mydomain.com/svn/ %1
goto :eof
于 2013-05-26T11:00:37.397 回答