5

我有一个预定 EOL 的 svn 存储库,并且各种项目正在通过 svnrdump 转储和 svnadmin 加载移动到一个新的存储库。出于讨论的目的,基本拓扑是:

old repo:  http://oldrepo/repositories/oldname/...
new repo:  http://newrepo/repositories/newname/...

这个特定的存储库很大,我有一个开发人员希望将他的旧工作区指向新的存储库。我看到的问题是 TortoiseSVN 允许重新定位事件,并且通过输入 URL http://newrepo/repositories/newname,初始重新定位似乎成功。但是,工作区现在认为新 repo 上的目录结构如下所示:

http://newrepo/repositories/newname/oldname

有没有办法删除工作区对旧名称的引用?由于额外的意外目录,SVN 更新失败。我能想到的唯一选择是让这个开发人员从新的存储库中签出整个所需的工作空间,然后让他将他的 WIP 文件复制到新的工作空间中。客户端还有其他选择或解决方案吗?

编辑:工作目录是 c:\SVN\FolderA。执行命令:svn relocate http://newrepo/repositories/newname/Folder1/FolderA返回以下错误:

svn: E155024: Invalid relocation destination: 'http://newrepo/repositories/newname/Folder1/FolderA' (does not point to target)

我不确定这有多相关,但原始存储库位置 oldrepo 是一个文件夹,但在新存储库中,newrepo(即:)http://newrepo/repositories/newname是新存储库的根级别。另外,我应该指出,在迁移过程中,更改被保留,但个别版本号没有。

4

2 回答 2

4

我的工作副本也有同样的问题。如果将存储库 UUID 复制到新存储库(使用“svnlook uuid”和“svnadmin setuuid”命令),则可以避免此“无效的重定位目标”错误,但是当我将工作副本升级到 1.8 时,尝试时出现此错误将我的工作副本重新定位到新的仓库。

我建议您只需删除工作文件夹根目录中隐藏的 .svn 文件夹,然后使用指向同一文件夹的新 URL 再次执行结帐。SVN 只会为新的存储库再次“版本化”文件,但它所花费的时间与您执行新签出的时间一样长。如果您有任何修改过的文件,请先创建一个补丁文件,然后再重新检出到同一文件夹,以防检出命令覆盖修改过的文件。

请记住,两条路径之间存在差异:

http://newrepo/repositories/newname
http://newrepo/repositories/newname/ <-- notice the final slash

第一个路径说“将新名称目录复制到目标文件夹”,第二个路径说“将新名称目录的内容复制到目标文件夹”。

希望这可以帮助。

于 2013-10-10T22:23:38.560 回答
1

您的开发人员可能必须:

  • 断开他的项目与旧工作区的连接
  • 将他未提交的更改(如果有)保存在其他地方
  • 删除他的项目
  • 从新工作区导出他的项目
  • 将他未提交的更改(如果有)重新应用到项目中
于 2012-05-08T12:13:12.983 回答