关于合并多个svn回购的澄清

关于合并多个svn回购的澄清,svn,version-control,merge,consolidation,Svn,Version Control,Merge,Consolidation,我们在特定的物理位置有多个SVN存储库/mnt/data1/repos 回购协议的结构如下所示 repos | App1 | trunk | module1 | module2 | branches | App2 | trunk

我们在特定的物理位置有多个SVN存储库
/mnt/data1/repos

回购协议的结构如下所示

repos
     |
     App1
         |
         trunk
              |
              module1
              |
              module2
         |
         branches
     |
     App2
         |
         trunk
              |
              module1
              |
              module2
         |
         branches
     |
     App3
         |
         trunk
              |
              module1
              |
              module2
         |
         branches
我们正试图以不同的路径将多个回购合并为单个回购,如下所示
/mnt/data2/repo

     repo
     |
     trunk
         |
         App1
            |
            module1
            |
            module2
         |
         App2
            |
            module1
            |
            module2
         |
         App3
            |
            module1
            |
            module2
我使用svnadmin在
/mnt/data2/repo

     repo
     |
     trunk
         |
         App1
            |
            module1
            |
            module2
         |
         App2
            |
            module1
            |
            module2
         |
         App3
            |
            module1
            |
            module2
使用
svn mkdir
创建目录
/mnt/data2/repo/trunk/App1
/mnt/data2/repo/trunk/App2
/mnt/data2/repo/trunk/App3

然后我尝试对app1
/mnt/data1/repos/app1/
执行
svn dump
,使用
svndumpfilter
include trunk
对其进行过滤,并将
svn导入
/mnt/data2/repo/trunk/app1
。它失败,因为
/mnt/data2/repo/trunk/App1
不是repo的根

请让我知道执行此整合的最佳方法重要的一点是,我们应该保存所有回购协议的修订历史。

编辑:

我执行了以下步骤

svnadmin dump --quiet /mnt/data1/repos/App1 > App1.dmp
svndumpfilter include --targets /tmp/list.txt < App1.dmp > App1Trunk.dmp
svnadmin create /mnt/data2/repo/
svn mkdir --parents svn://<IP>:<PORT>/trunk/App1 -m "Creating MC directory"
svnadmin load  --quiet --parent-dir trunk/App1 /mnt/data2/repo < App1Trunk.dmp
svnadmin转储--quiet/mnt/data1/repos/App1>App1.dmp
svndumpfilter包括--targets/tmp/list.txtApp1Trunk.dmp
svnadmin创建/mnt/data2/repo/
svn mkdir--父svn://:/trunk/App1-m“创建MC目录”
svnadmin load--安静--父目录trunk/App1/mnt/data2/repo

当我尝试加载转储文件时,我发现它仍在创建
trunk/App1/trunk/module1
trunk/App1/trunk/module2
,等等。请帮助我将数据加载到
trunk/App1/moudle*
最简单的方法是使用
svn mv
移动对象:

$ svn mv --parents $URL/repos/App1/trunk/module1 $URL/repos/trunk/App1/module1
这将把您的存储库移动到一个新的结构中,并且您仍然拥有您的历史记录。在移动整个项目时,您必须与存储库的用户协调。确保用户知道发生了什么。事实上,协调通常是这些举措的最大问题


svnadmin dump
svnadmin load
的问题在于,您可以移动的内容是有限的。即使将旧项目移动到新节点,也会保留其目录结构。由于Subversion存储库是一个巨大的项目,您可以正式提交同时涉及多个分支、主干和项目的更改,Subversion坚持保持其结构。您可能可以将某些内容移动到新的根节点,但除此之外,您无法真正编辑结构。

可能重复感谢您为我指出了该答案。但是当我尝试导入过滤后的转储时,它失败了。让我用
svnadmin import
--parent dir
来尝试一下,updatere不是
svnadmin import
命令。导入过滤后的转储时会出现什么错误?正如在我创建转储并使用svndumpfilter进行过滤的另一个线程中的回答中所述。然后,我使用
cd/data/repo svnadmin created newrepo
创建了一个新的repo。现在,当我从转储文件
svnadmin load加载数据时——parent dir/trunk/data/repo/newrepo
和do
svn列表file:///data/repo/newrepo
没有显示任何内容…@bahrep我执行了您建议的步骤,但它也将原始存储库路径添加到新存储库中。我已将问题编辑得更清楚。谢谢。通过组合
svnadmin dump
svndumpfilter
svn load
svn mv
我能够成功创建所需的结构。