我们在特定的物理位置有多个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
我在/mnt/data2/repo
使用 svnadmin 创建了一个存储库
使用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 import
/mnt/data2/repo/trunk/App1
。它失败了,因为/mnt/data2/repo/trunk/App1
不是存储库的根。
请让我知道执行此合并的最合适方法。重要的一点是,我们应该保留所有存储库的修订历史记录。
编辑:
我执行了以下步骤。
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
当我尝试加载转储时,我发现它仍在创建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 坚持保持它的结构。您也许可以将某些内容移动到新的根节点,但除此之外,您无法真正编辑结构。