2011-06-21 48 views
2

回过头来,我们将Subversion版本库移到一个新服务器(“B”),期望旧版本(“A”)退役。是否有可能将修订从一个Subversion版本库“附加”到另一个版本中?

那么,服务器/存储库从来没有真正退休,而我不知道,源控制下的许多项目之一从未得到其工作副本引用更新。换句话说,所有这个项目(以及那个项目)的变化已经被提交到旧服务器。

已经有没有任何更新到服务器上特定项目,所以没有实际来源的任何冲突的机会。但是,显然,版本号将会不一致。

是否有可能将提交到存储库A的更改合并到存储库B中?

基本上我要求的是类似的问题,How to combine two branches from two different repositories into a single repository?除了这是Subversion,不是git,并且实际上没有任何分支,只有一组变更都被提交到trunk(在错误的存储库中)。

不需要需要连续同步,这只是一个一次性的操作,在旧的存储库最终真正退休之前。而且我更愿意提出有关项目的整个修订历史,即不是将最新版本作为一个大规模修订版提交。

以防万一的问题并不完全清楚,这里是一个视觉:

Repository A 
    Project X: Rev 1 -> Rev 2 -> Rev 3 
    Project Y: Rev 4 -> Rev 5 -> Rev 6 

Repository B: 
    Project X: Rev 1 -> Rev 2 -> Rev 3 -> Rev 4 -> Rev 5 -> Rev 6 
              |  |  | 
Expected outcome for Repository A:   v  v  v 
    Project X: Rev 1 -> Rev 2 -> Rev 3 -> Rev 7 -> Rev 8 -> Rev 9 
    Project Y: Rev 4 -> Rev 5 -> Rev 6 

我只是想对所有到B的存储库版本为A的树(并且只有部分)的一个组成部分的复制,并保持一切。如果有必要,我确定X的修订看起来像B上的新修订版。

解决方案?

回答

4

您可以使用svnadmin dump获取整个存储库的转储,然后使用svndumpfilter仅生成某个存储库路径的转储。然后使用svnadmin load将结果文件导入到新的存储库中。

下面是一些例子:http://daveharris.wordpress.com/2008/08/05/svn-dump-parts-of-a-repository/

+1

对于任何遇到此问题的人来说:这是行得通的,但**为svndumpfilter添加'--drop-empty-revs'选项**非常重要,如果您只是为了部分这个版本库,否则你最终会得到一大堆空的版本。 – Aaronaught

2

只要在这两个仓库的变化确实不重叠,你可以这样做:

svnadmin dump --incremental -r4:6 /repository/B | svnadmin load /repository/A

创建修订7,8和9在存储库A中,保留作者,时间戳等。

--incremental确保倾销的更改与修订版本3相关,该修订版本应该与已经在回购(为了安全起见,我会首先用一次性存储库A的一次性拷贝来测试它。)

相关问题