2013-05-21 113 views
5

背景:DynDNS现在开始需要每月登录一次以保持其免费帐户的活跃(以前只需每月更新一次您的IP地址)。我相信迟早我会忘记这样做,失去我的账户。如何将svn网址重定向到其他网域?

我使用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地址,但我宁愿重定向到域名。

+0

什么版本的svn客户端和服务器? – explunit

+0

这并不回答你的具体问题,但我可以建议一种替代方法吗?假设你使用的svn 1.5或更高版本支持[外部相对URL](http://svnbook.red-bean.com/en/1.7/svn.advanced.externals.html),按照其中一种方法[这里](http://stackoverflow.com/questions/204616/how-to-migrate-all-urls-in-svnexternals-properties-across-a-repository)将所有外部变为相对将解决更基本的问题。 – explunit

+0

@explunit:这是一个有趣的方法。不幸的是,它不适用于所有的项目,因为它们并不都与外部存储在同一个存储库中。但大多数是。请添加此答案作为答案,即使它不回答我提到的问题,也可能获得赏金。 – dummzeuch

回答

0

显然没有解决方案像我想的那样容易。我最终编写了一个基于版本洞察源代码的小型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 
5

你(真的)询问2个相关的问题:

  • 我也可以把somename.domain.comanothername.somedomain.com
  • SVN客户端可以使用旧名称,但与新主机intecat吗?

而简短的回答将是

  • 没有

更长的版本

对于旧主机重定向到你,可以使用至少两个新变化(具有相同的最终结果)

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

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

上somename的要求将数据回答anothername

  • 在Apache的配置主机的位置somename你可以添加重定向到别名Apache的

:它只能在浏览器的层面上工作 - 当你尝试使用此重定向的位置为目标对任何Subversion的命令,你会得到错误“库移动,请重新定位”,你必须移居所有旧资源都添加到新网址中。

所有外部定义好消息被写成源回购中的svn的属性,你可以得到这些外部组件列表(值)和更新使用新值,而这个操作(理论上)可以在工作副本获得的外部

svn propset svn:externals --target FILE在批次定义新的外部的根目录中自动

svn propget -R svn:externals . > FILE

+0

因此,1我需要访问域名为dyndns.org的DNS?还是我误解了一些东西? – dummzeuch

+0

@dummzeuch - 不,您必须有权访问区域'mydomain.com',以便添加到域名RRs'svn IN CNAME mysvn.dyndns.org'中,但是在它之后阅读p.2 - 它不会解决问题访问svn客户端 –

1

我可以建议一个ALTERNA te的方法?

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

如果它们不是全部相对URL,则可以使用类似的脚本将它们从server1更改为server2。这在服务器迁移过程中经常进行。假设你保持良好状态backups,这可能会让你一次性解决所有的痛苦,而不是推迟一段时间。

相关问题