svn开关,-relocate做什么?

时间:2011-06-20 20:29:12

标签: svn version-control

当人svn switch <source> <target>时,我明白它将工作目录切换到目标路径。

我想了解--relocate用于什么。我认为只有当存储库的URL发生变化并且想要更新工作副本URL以指向新的svn服务器位置时才会使用它。但似乎Relocate can only change the repository part of an URL

所以我的问题是,-relocate开关有什么作用?特别是,可以用于集成到用户分支的供应商分支,该分支与以前的版本有很多不同之处,即

svn co path\to\vendor\lib

svn --relocate lib url\path\to\my\branch

svn commit -m "Updated my branch with vendor code without using cp, this way _I think_ enables deleting folders and files that don't exist in new version of vendor lib.

我能做到这一点吗?

2 个答案:

答案 0 :(得分:4)

SVN Relocate适用于那些讨厌的管理员将路径移动到您的存储库时。

例如原文:

http://mydomain.com/svn/repo/Project/MyApplication/trunk

管理员感到无聊并将其更改为:

http://mydomain.com/svn/MyApplication/trunk

您需要执行svn relocate来告诉svn项目的路径已经改变。


至于您提供的示例,它不能用于重新集成分支,命令是让svn客户端将其所有路径更新到存储库的新位置。你需要svn合并它们。

答案 1 :(得分:3)

  

我认为只有在存储库的网址发生变化并且想要更新工作时才会使用此功能   copy url指向新的svn服务器位置。

这正是它的作用。如果您的subversion服务器已更改其位置,请使用“switch --relocate”,它只会联系服务器并查看它是否仍然存在,然后将工作副本中的URL重写为新URL。您的工作副本不会更新,与服务器有任何差异(直到再次运行svn update)

svn开关,没有--relocate将你的工作副本切换到一个新的位置(通常是一个分支),并对你的工作副本进行必要的修改,将它转换成那个分支它就像检查那个分支一样,但通常更快,更方便。

更多信息here / here

  

特别是,它是否可以用于向用户分支集成具有许多差异的供应商分支   自以前的版本,即

不,这就是svn merge的用途。

虽然svn开关可以允许您首先在工作副本中测试该供应商分支。您可以按原样保留主项目,但是将供应商所在的子目录切换到新的供应商分支。

请注意,subversion(尚未)支持不同的subversion服务器之间的任何合并/分支,因此必须将您的供应商分支导入到您的“用户分支”优先的服务器中。然后,您可以将新的供应商分支与您的用户分支合并。

您也可以使用svn:external,将供应商代码保留在项目路径之外,并使用svn:external在工作副本中“导入”它们是很常见的。例如你有  /myproject/trunk/作为您的项目,/3party/libraryFoo/version1/

使用myproject时,您希望将其设置为/myproject/trunk/libraryFoo,因此您只需在/myproject/trunk/上添加svn:external即可libraryFoo http://myserverver//3party/libraryFoo/version1/。如果要更新到新版本,只需将svn:external更改为例如libraryFoo http://myserverver//3party/libraryFoo/version2。这允许你从另一个subversion服务器中提取东西,例如直接到3.party subersion服务器 - 虽然如果你打算进行本地更改,这不是很有用。