在CentOS Linux 6.3之上,我们在SVN 1.6.11上运行了大约5个不同的SVN仓库。 上周我被要求将我们的SVN服务器迁移到新的服务器上。 我们有一个cron作业,每周对每个repo进行一次完全备份,每隔一晚我们通过以下方式进行增量备份: svnadmin dump -r 100-200 --incremental repo |gzip -9 > incremental_100_200.svn.gz (其中repo是回购的名称,100是自上次备份以来最早的修订,200是此备份时最新的修订)
我完成了最后一次完全备份到新服务器的恢复,创build了一个近乎最新的回购副本。 整个星期,我计划将旧服务器的增量备份恢复到新的状态,以使它们保持同步,然后在周五切换到新服务器。
不幸的是,我一定错过了在一些回购协议上的增量恢复,不知何故,我们切换到新的服务器,人们继续增加文件和修改,增加了新的修订版本。 问题是,由于在一些回购协议上有一些修改,所以现在新的修订版本已经采用了这些版本号,所以我不能只从旧的回购中获得增量,并将其加载到新的回购中,因为现在还有其他数据那些修订。 我该怎么办?
转储中的修订不要求将其加载到新存储库中与旧版本中相同的修订版本号中。
一个简单的testing用例是一个存储库,其中一个文件是在r1中创build的,而b是在r2中创build的:
# svn log ------------------------------------------------------------------------ r2 | root | 2013-05-02 00:26:16 -0600 (Thu, 02 May 2013) | 1 line add file b ------------------------------------------------------------------------ r1 | root | 2013-05-02 00:25:49 -0600 (Thu, 02 May 2013) | 1 line add file a ------------------------------------------------------------------------
倾倒这些和相反的顺序加载:
# cat r2.dump | svnadmin load new <<< Started new transaction, based on original revision 2 * adding path : b ... done. ------- Committed new rev 1 (loaded from original rev 2) >>> # cat r1.dump | svnadmin load new <<< Started new transaction, based on original revision 1 * adding path : a ... done. ------- Committed new rev 2 (loaded from original rev 1) >>>
工作得很好,向后的时间戳和所有。
# svn log ------------------------------------------------------------------------ r2 | root | 2013-05-02 00:25:49 -0600 (Thu, 02 May 2013) | 1 line add file a ------------------------------------------------------------------------ r1 | root | 2013-05-02 00:26:16 -0600 (Thu, 02 May 2013) | 1 line add file b ------------------------------------------------------------------------
请注意,如果您加载的修订版本修改了新版本库中已被修改的文件,那么自加载修订版以来的所有新修改都将被清除; 您需要重新合并这些更改。