TortoiseSVN警告:您正在尝试将工作副本重定位到同一存储库中的其他路径

时间:2012-10-15 17:19:15

标签: svn tortoisesvn svn-externals

最近,我一直在尝试使用svn:externals,并在执行SVN Update时收到错误消息。

  

Z:\项目\ workB \主干

     

无法重新定位' Z:\ Projects \ workB \ trunk'因为它不是工作的根源

     

副本;尝试重新定位' Z:\ Projects \ workB'代替

enter image description here

正如this page所示,我通过上下文菜单在TortoiseSVN → Relocate上执行了Z:\Projects\workB。然后我收到了这个消息框。

  

您似乎正在尝试将工作副本重定位到同一存储库中的其他路径。

     

发件人:file:/// Z:/ repos / repoB

     

收件人:file:/// Z:/ repos / repoB

enter image description here

这是正常的吗?尽管警告消息表示不同的路径,但From:To:路径都是相同的。我想知道在这里按YES是否可以。

这可能是相关的:Problem trying to relocate WC to new repository


[更新]

为了解释我做了什么导致第一个错误(无法重定位等),当前目录结构是这样的。

  

Z:\回购\ repoA

     

Z:\回购\ repoB

     

Z:\项目\ workB

Z:\Projects\workB是存储库repoB的结帐。我通过以下步骤在svn:externals上创建了Z:\Projects\workB。 (我尝试将整个主干文件夹及其内容从repoA导入Z:\Projects\workB\trunk。我有理由这样做,但这将是一个很长的故事。)

  1. 右键点击Z:\Projects\workB并选择TortoiseSVN -> Properties
  2. New -> Externals
  3. 按下New...
  4. 键入" trunk"对于本地路径和" file:/// Z:/ repos / repoA / trunk"用于URL并关闭设置窗口。

    enter image description here

  5. 右键单击Z:\Projects\workB并选择SVN Commit...并按“确定”以应用外部定义。提交已经完成。

  6. 要查看外部文件是否已导入,我右键点击了Z:\Projects\workB并选择了SVN Update
  7. 我得到了第一个错误,即尝试重新定位。

1 个答案:

答案 0 :(得分:4)

不,不,不!

永远不要使用file:///网址 - 特别是对于共享项目。这很糟糕,很可怕,这不是一个好主意。

如果没有别的,请使用svnserve进程启动Subversion服务器。它非常简单,没有人可以直接访问您的Subversion存储库目录。

在使用Subversion时,file://网址很好,但绝不应该与实际项目一起使用。如果您想要一个开源的Subversion服务器,请查看CollabNet的Subversion Edge。这将允许您在Windows服务器上通过http://提供存储库。另一个受欢迎的是VisualSVN Server。它不是开源的,但很多人喜欢用于设置Subversion存储库的免费版本。


您没有提供太多信息。您是否在Subversion中意识到要在工作目录中签出要处理的文件?例如:

 C:> cd C:\workdir
 C:> svn co file:///Z:/Projects/workB/trunk workB-trunk

这将在C:\ workdir \ workB-trunk上创建本地副本。这是您可以使用文件的地方。请注意您的存储库与您签出的文件位于不同的位置。我有一种感觉,这就是为什么你会看到重新定位的东西。

要使用svn:externals,您需要将svn:externals属性放在项目目录中:

 C> cd \workdir\workB-trunk
 C> svn propset svn:externals "^/Z:/Projects/WorkC/trunk workC" .
 C> svn update

这会将最新版本的file:///Z:/Projects/WorkC/trunk放入workB-trunk的工作副本中。提交更改,每个人都会在结帐file://Z:/Projects/WorkC/trunk时获得此结果。


解决方案

任何机会......你碰巧有一个文件:/// Z:/ repos / repoB / trunk?如果是这样,你试图将repoA签出到trunk,其中trunk已经是repoB中的一个目录。

在这种情况下,只需删除file:///Z:/repos/repoB/trunk