我有一个带有SVN存储库的硬盘驱动器,它“死了”。在我设法恢复它之前,我在另一个HDD上创建了新的存储库,并将所有文件从版本1开始提交到新存储库并丢失所有历史记录。
现在我已经恢复了旧的SVN存储库,我正在尝试将我正在处理的新存储库加载到旧存储库中,因此基本上新存储库的修订版1必须成为旧存储库的修订版2456。
当我运行svnadmin load
命令时,我收到以下错误:
<<< Started new transaction, based on original revision 1
* adding path : ---------------- ...svnadmin: File already exists: filesystem 'C:\
Repositories\repname\db', transaction '2788-25k', path '----------------'
知道如何“合并”他们吗?如果它甚至可能,当然......
答案 0 :(得分:2)
您必须重新开始使用新的存储库并首先从原始存储库加载事务。
svnadmin dump recovered-repo > dumpfile
svnadmin load new-repo < dumpfile
然后从崩溃后您一直在工作的当前存储库的末尾加载新事务。请务必指定您的修订版,以便只接受新内容。
svnadmin dump current-repo -r firstnewrev:lastnewref --incremental > newdumpfile
svnadmin load new-repo < newdumpfile
因为我没有任何存储库可供测试,所以我实际上没有对此进行测试,所以要小心,不要乱用任何你没有备份的东西。有关更多帮助,请参阅免费在线图书:http://svnbook.red-bean.com/
答案 1 :(得分:1)
当我们不得不使用cvs2svn迁移旧的CVS存储库时,我遇到了这个问题。这个过程很有效,但我们最初错过了一些来自CVS的项目,并且团队也在事后对CVS做了一些提交。所以我们随后的SVN转储有一个组合: *以前在SVN中没有见过的新项目 *现有项目已经迁移到SVN,但是有更新的提交。
这是导致负载冲突的第二部分。
然后重新整理整个CVS回购(这需要花费数小时和数小时),我只依靠我们的老朋友svndumpfilter去除冲突路径。
[svnrepos]$ svndumpfilter exclude conflict-path < latestRepo.dump > repo_filtered_woConflicts.dump
[svnrepos]$ svnadmin load REPONAME < repo_filtered_woConflicts.dump
[svnrepos]$ svndumpfilter include conflict-path < latestRepo.dump > repo_filtered_ConflictsOnly.dump
[svnrepos]$ svnadmin dump REPONAME | svndumpfilter exclude conflict-path > repo_filtered_woConflicts.dump #overwrites previous filter
[svnrepos]$ mv REPONAME REPONAME_old
[svnrepos]$ svnadmin create REPONAME
[svnrepos]$ chmod -R g+rwx REPONAME # if shared by apache
[svnrepos]$ svnadmin load REPONAME < repo_filtered_woConflicts.dump
[svnrepos]$ svnadmin load REPONAME < repo_filtered_ConflictsOnly.dump