关于合并多个 svn repos 的说明
Posted
技术标签:
【中文标题】关于合并多个 svn repos 的说明【英文标题】:Clarification on consolidating multiple svn repos 【发布时间】:2014-01-21 12:03:43 【问题描述】:我们在特定物理位置/mnt/data1/repos
有多个 SVN 存储库
并且回购的结构如下
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 创建了一个repo
创建目录/mnt/data2/repo/trunk/App1
、/mnt/data2/repo/trunk/App2
和/mnt/data2/repo/trunk/App3
使用svn mkdir
。
然后我尝试做 app1 /mnt/data1/repos/App1/
的 svn dump
,使用 svndumpfilter
和 include trunk
过滤它,并将 svn import
做为 /mnt/data2/repo/trunk/App1
。它失败了,因为 /mnt/data2/repo/trunk/App1
不是 repo 的根。
请告诉我执行此合并的最佳方式。 重要的是我们应该保留所有 repos 的修订历史记录。
编辑:
我执行了以下步骤。
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*
。
【问题讨论】:
Moving SVN repositories data with history as subfolders into another repository的可能重复 感谢您指出我的答案。但是当我尝试导入过滤后的转储时,它失败了。让我试试svnadmin import
和--parent-dir
并更新
没有svnadmin import
命令。导入过滤后的转储时遇到什么错误?
正如您在另一个线程中的回答中提到的,我创建了转储并使用 svndumpfilter 过滤。然后我使用cd /data/repo svnadmin created newrepo
创建了一个新的仓库。现在,当我从转储文件 svnadmin load --parent-dir /trunk /data/repo/newrepo
加载数据并执行 svn list file:///data/repo/newrepo
时,什么都没有显示...
@bahrep 我执行了您建议的步骤,但它也将原始存储库路径添加到新存储库。我已将问题编辑得更清楚。
【参考方案1】:
最简单的方法是使用svn mv
来移动东西:
$ svn mv --parents $URL/repos/App1/trunk/module1 $URL/repos/trunk/App1/module1
这会将您的存储库移至新结构,并且您仍将拥有自己的历史记录。在移动整个项目时,您必须与存储库的用户进行协调。确保用户知道发生了什么。事实上,协调通常是这些动作的最大问题。
svnadmin dump
和svnadmin load
的问题是你可以移动的东西是有限的。即使您将旧项目的目录结构移动到新节点,也会保留它们。由于 Subversion 存储库是一个巨大的项目,并且您可以正式提交涉及多个分支、主干和项目的更改,因此 Subversion 坚持保持其结构。您也许可以将某些内容移动到新的根节点,但除此之外您无法真正编辑结构。
【讨论】:
谢谢。通过svnadmin dump
、svndumpfilter
、svn load
和 svn mv
的组合,我能够成功创建所需的结构。以上是关于关于合并多个 svn repos 的说明的主要内容,如果未能解决你的问题,请参考以下文章
如何将不同机器上的 2 个不相关的 svn 存储库合并到一个存储库中?