经过一些研究后,我发现可以将文件从一个仓库中移出,转移到另一个仓库,单独的仓库中并保持相关的历史记录。该过程包括将整个存储库转储到文件,过滤该转储文件以获取所需的路径/文件(假设您不想移动所有内容),然后将所述转储文件加载到目标存储库中。
我在前两个步骤中找到了成功,但在最后一步遇到了障碍 - 正在加载。
从SVN书中,有一个例子表明目标仓库中的任何不存在的路径都将在加载过程中创建:
svnadmin load --parent-dir new/subdir/for/project /var/svn/restored < repos-backup
<<< Started new txn, based on original revision 1
* adding path : test ... done.
* adding path : test/a ... done.
但是,当我自己运行命令(当然使用不同的路径)时,我得到以下内容:
<<< Started new transaction, based on original revision 78
svnadmin: File not found: transaction '990-tj', path 'myFolder/trunk/templates/default/fireWood'
* adding path : myFolder/trunk/templates/default/fireWood ...
然后我立即被提示 - 不清楚该过程是否成功。检查存储库时,没有创建新目录,也没有加载任何文件。无论如何。
有什么想法吗?
答案 0 :(得分:3)
我最终明确创建整个目标目录结构,然后导入过滤后的转储。现在目标目录全部存在,导入成功运行。
答案 1 :(得分:2)
我正在清理我的回购时重新组织这些命令。我基本上将所有内容从一个仓库移动到另一个仓库中的新文件夹,加入了类似的项目。
我用过
svnadmin dump d:\repoPathToMove > d:\backupFolder\repoName.dump
并使用
svnadmin load d:\pathToNewRepo --parent-dir InternalFolder < d:\backupFolder\repoName.dump
在d:\ pathToNewRepo是目标仓库的路径,而InternalFolder是将存放已加载文件的新文件夹。如果我创建InternalFolder来执行加载,这是有效的。我在目标浏览器上使用Toitoise SVN的RepoBrowser创建了内部文件夹。
尝试运行加载而不创建文件夹,我得到了同样的错误。所以我想简单的方法是添加一个命令来创建缺少的父目录。
我没有在这里使用任何过滤。您也可以通过编写转储并一个接一个地加载来简化它:
svnadmin dump d:\repoPathToMove | svnadmin load d:\pathToNewRepo --parent-dir InternalFolder
避免创建转储文件
答案 2 :(得分:0)
有什么想法吗?
虽然我无法帮助您解决错误,但我的想法是尝试在不提供路径的情况下加载。这些东西最终会达到顶级水平,但是使用SVN,您可以随时移动它。
(你的存储库有一些副本可以尝试所有这些,不是吗?)
答案 3 :(得分:0)
问题可能在于过滤。 Svndumpfilter不处理所有类型的依赖项,并在几种情况下默默省略必要的修订。
在这种特殊情况下,检查在添加文件之前是否在dumpfile中正确创建了所有目录。