是否可以将一个Subversion仓库中的修订版本“追加”到另一个仓库中?

3
有一段时间以前,我们将Subversion存储库移动到一个新服务器(“B”),预计旧服务器(“A”)将被停用。然而,服务器/存储库A实际上从未被停用,并且在我不知情的情况下,许多源代码控制项目中的一个项目没有更新其工作副本引用。换句话说,该项目(仅此项目)的所有更改都已提交到旧服务器。在新服务器上,该特定项目根本没有任何更新,因此实际源代码中不存在任何冲突。但是,显然,修订号将不一致。是否可以将提交到存储库A的更改合并到存储库B中?基本上,我要问的问题与此问题类似:如何将来自两个不同存储库的两个分支合并为单个存储库?。除了这是针对Subversion而不是git,并且实际上没有任何分支,只有一个错误地提交到主干的更改集合。我不需要持续同步,这只是在旧存储库最终真正停用之前的一次操作。我更喜欢将涉及的整个修订历史记录带过来,即不仅将最新版本作为一个大修订提交。为了防止问题不太清楚,这是一个可视化的解释:
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

我希望将A仓库中某一部分的所有版本记录(仅限此部分)复制到B的代码库中,同时保留其他内容不变。如果必要的话,我可以接受X的版本记录在B上看起来像新的版本记录。

有解决方案吗?

2个回答

4

1
对于其他遇到这个问题的人:这确实有效,但是如果您只是针对存储库的一部分进行操作,则非常重要添加 --drop-empty-revs 选项给 svndumpfilter,否则您将得到大量空修订版本。 - Aaronaught

3
只要两个仓库中的更改确实没有重叠部分,你就可以执行以下操作: svnadmin dump --incremental -r4:6 /repository/B | svnadmin load /repository/A 这将在仓库A中创建7、8和9号版本,保留作者、时间戳等信息。 --incremental选项确保转储的更改是相对于第3个版本的,这应该与仓库A中已有的内容匹配。
(为了安全起见,我建议先用一个临时的仓库A副本进行测试。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接