关于合并多个svn回购的澄清
我们在特定的物理位置有多个SVN存储库关于合并多个svn回购的澄清,svn,version-control,merge,consolidation,Svn,Version Control,Merge,Consolidation,我们在特定的物理位置有多个SVN存储库/mnt/data1/repos 回购协议的结构如下所示 repos | App1 | trunk | module1 | module2 | branches | App2 | trunk
/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
和dosvn列表file:///data/repo/newrepo
没有显示任何内容…@bahrep我执行了您建议的步骤,但它也将原始存储库路径添加到新存储库中。我已将问题编辑得更清楚。谢谢。通过组合svnadmin dump
,svndumpfilter
,svn load
和svn mv
我能够成功创建所需的结构。