关于合并多个 svn 存储库的说明



我们在特定的物理位置有多个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,使用svndumpfilterinclude 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/module1trunk/App1/trunk/module2trunk/App1/moudle*

最简单的方法是使用svn mv来移动东西:

$ svn mv --parents $URL/repos/App1/trunk/module1 $URL/repos/trunk/App1/module1

这会将您的存储库移动到新的结构,并且您仍将拥有历史记录。移动整个项目时,您必须与存储库的用户协调。确保用户知道发生了什么。事实上,协调通常是这些举措的最大问题。

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

相关内容

  • 没有找到相关文章

最新更新