将SVN存储库复制到具有历史记录的另一个服务器存储库的子文件夹中

时间:2014-07-24 17:54:04

标签: svn svnadmin

SVN回购1:https://local.server.001/svn/repo1

SVN回购2:https://local.server.002/svn/repo2

我们希望将repo1(从服务器001)移动到repo2的子文件夹,称为(例如)'repo1'。

这就是说,repo1将被复制到这个位置:

https://local.server.002/svn/repo2/trunk/repo1

使用简单的文件副本执行此操作非常简单。但是,我要做的是在保存被复制到repo2存储库的repo1文件夹中的文件的历史记录时实现此目的。

我在存储库之间或不同服务器上的存储库之间找到了大量的复制示例 - 但是我无法找到这种特定情况的示例。

请帮忙!感谢。

我们都是TortoiseSVN用户,所以任何使用TorsoiseSVN GUI的答案都是优先考虑的。我们的SVN服务器在VisualSVN上运行。

编辑 - 添加精美插图:

SVN repo into another repo's folder

编辑2 - 仍然无法让它工作:

在回购1:sysadmin dump C:\Repositories\repo1 > D:\dump\repo1

上执行此操作

这很有用。将repo1转储文件复制到服务器2.然后运行:

svnadmin load --parent-dir repo1 C:\Repositories\repo2 < D:\someDir\repo1

我被阻止了这个错误:

Started new transaction, based on original revision 1. adding path : repo1/trunk ...svnadmin: E160013: File not found: transaction '281-96', path '/repo1/trunk'

我尝试将顶级文件夹repo1提交到repo2存储库,但没有运气。

1 个答案:

答案 0 :(得分:0)

啊哈。似乎我的案例和S / O上的其他类似案例之间的区别在于我的存储库使用默认的/ branch / tags / trunk结构

我的最终序列是:

svnadmin dump C:/Repositories/repo1 > D:/dump/repo1.dump

svndumpfilter include /trunk < D:/dump/repo1.dump > D:/dump/repo1.filtered.dump

然后我(通过TortoiseSVN)在repo1存储库中创建了一个顶级repo2文件夹。

对于我来说,下一行失败了,尽管它遵循了所有建议的例子:

svnadmin load --parent-dir /repo1 C:/Repositories/repo2 < D:/dump/repo1.filtered.dump

不好。没工作。保持返回类型Started new transaction, based on original revision 1. adding path : repo1/trunk ...svnadmin: E160013: File not found: transaction '281-96', path '/repo1/trunk'的错误。这是我被卡住的地方。我甚至创建了repo1文件夹,为什么这条消息!!

..好吧,这是因为branches / tags / trunk文件夹结构是VisualSVN的默认设置。我将load语句更改为在/trunk文件夹之前包含repo1后,一切正常:

svnadmin load --parent-dir /trunk/repo1 C:/Repositories/repo2 < D:/dump/repo1.filtered.dump

它正在寻找最高级别的/repo1文件夹,也就是说,住在tagsbranches和{{1}旁边}。

(在此之后,我不得不做一个SVN移动,将所有内容从/ trunk / repo1 / trunk / *移动到/ trunk / repo1。似乎dump / load重新创建了'trunk'文件夹,我没有'我想要。