如何将svn url重定向到另一个域?

时间:2013-05-21 07:20:20

标签: svn redirect dns tortoisesvn svn-externals

背景:DynDNS现在已开始要求每月登录一次以保持其免费帐户处于活动状态(之前您只需每月续订一次IP地址)。我相信我迟早会忘记这样做并丢失我的帐户。

我使用mysvn.dyndns.org来访问服务器上的我的subversion存储库,该服务器也可以通过svn.mydomain.com到达(截至目前)。不幸的是,大多数项目也指的是外部也位于mysvn.dyndns.org,我真的不想通过所有项目(> 100)并更改外部,因为这可能需要几个小时而且相当错误易发生。

有没有办法配置Windows或subversion / TortoiseSVN客户端将一个域重定向到另一个域?

e.g:

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

应重定向到

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

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

3 个答案:

答案 0 :(得分:5)

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

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

简短的答案将是

  • 没有

更长的版本

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

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

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

根据somename的要求,将回复来自anothername的数据

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

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

您的好消息

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

获取外部的工作副本的根

svn propget -R svn:externals . > FILE

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

答案 1 :(得分:1)

我可以建议一种替代方法吗?

假设您正在使用svn 1.5或更高版本supports relative URLs用于外部,请遵循this question中的一种方法将所有外部更改为相对,这将解决更基本的问题。

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

答案 2 :(得分: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