2009-11-19 105 views
3

经过一番研究后,我发现可以将文件从一个仓库移出另一个仓库,单独的仓库并且仍然保留关联的历史记录。该过程包括将整个repo转储到文件,过滤转储文件以获取所需的路径/文件(假设您不想移动所有文件),然后将所述转储文件加载到目标repo中。在SVN中的独立存储库之间移动文件

我在前2个步骤中找到成功,但在最后一步 - 装货时遇到了障碍。

从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

我也有这个问题,但我无法解决它。从一个回购到另一个回购是一个干净的举动,所以我最终从一个清理了所有东西,并导入了另一个。但是,当然,我失去了所有的历史。 – 2009-11-19 20:44:32

+0

尝试在Subversion邮件列表上询问。 – 2009-11-21 00:53:03

回答

3

我结束了明确的创建整个目标目录结构,然后导入过滤的转储。现在目标目录全部存在,导入成功运行。

0

任何想法?

虽然我不能帮你解决这个错误,但我的想法是尝试加载而不提供路径。这些东西最终会在顶层,但随着SVN你可以随时移动它。

(你确实有你的仓库的一些副本,尝试所有以,不是吗?)

+0

是的,当然:P – KOGI 2009-11-30 23:27:59

0

问题可能是在过滤。 Svndumpfilter不处理所有类型的依赖关系,并在几种情况下默默地忽略必要的修订。

在这种特殊情况下,请在添加文件之前检查转储文件中是否正确创建了所有目录。

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 

避免需要创建转储文件