将存储库移动到svn中的另一个子目录[重复]

Posted

技术标签:

【中文标题】将存储库移动到svn中的另一个子目录[重复]【英文标题】:moving repository to another subdirectory in svn [duplicate] 【发布时间】:2014-08-07 13:58:08 【问题描述】:

我会先说 svndumpfilter failed(使用这个解决方案:Moving SVN repositories data with history as subfolders into another repository)我得到了错误:

At line:1 char:30
+ svndumpfilter include \trunk < E:\tmp\test1.dump > E:\tmp\test1filter.dump
+                              ~
The '<' operator is reserved for future use.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RedirectionNotSupported

执行后:

svndumpfilter include \trunk < E:\tmp\test1.dump > E:\tmp\test1filter.dump

我的问题:我有几个项目作为单独的存储库:

RootDir -
     project1
     project2
     project3
     project4
     project5
     project6

其中 3 个项目是针对同一家公司的,所以我想像这样移动它们:

RootDir -
     project1
     project2
     companyX -
         project3
         project5
         project6
     project4

即我想将多个存储库作为子文件夹移动到一个主存储库中。

存储库位于 windows server 2012 中,我使用远程桌面在其上运行 svn 命令提示符。

我没有想法

【问题讨论】:

第二个命令应该是svnadmin load,而不是svnadmin dump 这实际上看起来像是在 SAME 存储库中移动项目,而不是将项目从一个存储库移动到另一个存储库,对吗?如果是这样,这不是“移动 SVN 存储库”问题的重复。 打错字了,我实际上做了 svnadmin load 【参考方案1】: svnadmin 不能只从存储库中转储子树,也不能使用逻辑路径到这个子树

svnadmin dump path_to_RootDir\project3 &gt; temp_path_in_disk\dump_file.dmp

将转储整个存储库,您必须从中提取 project(3|5|6)svndumpfilter include 到一个公共转储中。但是您可以使用svnrdump dump URL 在一个命令中转储子树,并在不进行预过滤的情况下获得 3 个文件

如果加载转储,则必须使用svnadmin load 命令 加载时,您必须使用存储库根目录的物理路径,而不是存储库内的逻辑路径:

svnadmin load path_to_RootDir &lt; temp_path_in_disk\dump_file.dmp

如果要更改从 fump 恢复的数据的挂载点,则必须使用 load 子命令的 --parent-dir 选项

svnadmin load --parent-dir companyX path_to_RootDir &lt; temp_path_in_disk\dump_file.dmp

【讨论】:

我试过" svnadmin dump my_site.com:8443/svn/test1 > E:\tmp\test1.dmp" > e:/tmp/test.dmp 我得到这个错误:"svnadmin: E205000: 'my_site.com: 8443/svn/test1/'是一个URL,当它应该是本地路径”×评论只能编辑5分钟×评论只能编辑5分钟×评论只能编辑5分钟 @Clonimus - 使用 PHYSICAL PATH 将工作转储和加载到 本地文件系统 上的存储库,而不是使用 URL 我做了svnadmin dump E:\ServerFolders\Development\Repositories\test1 &gt; E:\tmp\test1.dmp 并且成功了,但是:svnadmin load E:\ServerFolders\Development\Repositories\test2 &lt; E:\tmp\test1.dmp 给了我这个错误:At line:1 char:63 + svnadmin load E:\ServerFolders\Development\Repositories\test2 &lt; E:\tmp\test1.dmp + ~ The '&lt;' operator is reserved for future use. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : RedirectionNotSupported @Clonimus - 完整转储,恢复到现有仓库(如果仓库的内容相关)可能有奇怪的效果(如果test2 本身功能齐全) -从未尝试过。尝试过滤转储(只保留需要的文件夹)和|或使用 --parent-dir 加载它 @ Lazy Badger - 谢谢,用parrent-dir 加载它是什么意思?这是如何工作的,我从文档中不太了解。顺便说一句,test2 是一个空存储库(只有文件夹结构 - 主干、标签和分支)【参考方案2】:

注意:这解决了一个与问题预期不同的问题,该问题实际上是在询问将一组存储库移动到 不同 存储库的子目录中。

看起来您是在同一个存储库中移动项目,而不是在不同的存储库之间移动。如果是这种情况,那么我认为您只想使用 svn mv 使用两个 URL 参数的命令。例如。 svn mv --parents http://example.com/RootDir/project3 http://example.com/RootDir/companyX/project3 -m "consolidate company X projects"。如果中间目录不存在,“--parents”选项会创建它。

【讨论】:

只是为了svn mv --parents ... 谢谢,添加到答案中。某些版本的 svn 书籍不包含该选项的链接 :-) 我收到此错误“svn:E200007:源和目标 URL 似乎没有指向同一个存储库。”这很愚蠢。我用作源:“my_site.com:8443/svn/test1/”和目标:“my_site.com:8443/svn/tests/mytest1” 在第一次尝试中,没有创建目标(我想知道 mv命令将创建它),第二次尝试我在执行之前创建了它 好的,那看起来它实际上可能是两个独立的存储库。你在你的问题中说你有“[你的]存储库中有几个项目”,但看起来实际上你的服务器上有几个存储库。 SVN mv 不能在存储库之间工作。 @Ben - 那么最简单的方法是什么?谢谢你的回答【参考方案3】:

问题在于 Windows Server 2012 的 Windows PowerShell。

我下载了Console 2 并用它代替了 Windows shell。

“Moving SVN repositories data with history as subfolders into another repository”中建议的解决方案成功了。

出于我的需要,我什至不需要 svndumpfilter 部分。

【讨论】:

以上是关于将存储库移动到svn中的另一个子目录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将SVN存储库作为文件夹复制到具有历史记录的另一个存储库

cvs2svn:将存储库转换并放置到现有 SVN 存储库的子目录中

将.svn文件夹更改为Tortoise SVN中的另一个位置

svnadmin 加载到现有目录?

将文件添加到已设置的 svn 存储库

将 SVN 主干中的每个目录转换为不同的 GIT 存储库