svnadmin加载错误-文件已存在

svnadmin加载错误-文件已存在,svn,tortoisesvn,svnadmin,Svn,Tortoisesvn,Svnadmin,我有一个带有SVN存储库的硬盘,它“死了”。在我成功恢复之前,我在另一个硬盘上创建了新的存储库,并将所有文件提交到新的存储库,从版本1开始,并丢失所有历史记录 现在我已经恢复了旧的SVN存储库,我正在尝试将我正在处理的新存储库加载到旧存储库中,因此基本上新存储库的修订版1必须成为旧存储库的修订版2456 在运行svnadmin load命令时,出现以下错误: <<< Started new transaction, based on original revision 1

我有一个带有SVN存储库的硬盘,它“死了”。在我成功恢复之前,我在另一个硬盘上创建了新的存储库,并将所有文件提交到新的存储库,从版本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 '----------------'

您必须从一个新的存储库开始,并首先从原始存储库加载事务

svnadmin dump recovered-repo > dumpfile
svnadmin load new-repo < dumpfile
svnadmin dump recovered repo>dumpfile
svnadmin加载新的repo
然后从崩溃后一直使用的当前存储库的末尾加载新事务。一定要指定你的修订版,只接受新的东西

svnadmin dump current-repo -r firstnewrev:lastnewref --incremental > newdumpfile
svnadmin load new-repo < newdumpfile
svnadmin转储当前repo-r firstnewrev:lastnewref--incremental>newdumpfile
svnadmin加载新repo

因为我没有任何可用于测试的存储库,所以实际上我还没有测试过它,所以请小心,不要弄乱您没有备份的任何东西。有关更多帮助,请参阅免费在线书籍:

当我们不得不使用cvs2svn迁移旧的CVS存储库时,我遇到了这个问题。这个过程非常有效,但我们最初错过了CVS中的一些项目,而且团队在事后也对CVS做出了一些承诺。因此,我们随后的SVN转储包含以下组合: *以前在SVN中未见过的新项目 *现有项目已迁移到SVN,但具有较新的提交

是第二部分导致了负载冲突

因此,我没有重新混合整个CVS回购协议(这将花费数小时),而是依靠我们的老朋友svndumpfilter来消除冲突路径

  • 过滤最新的转储文件以排除冲突(将原始转储文件保留在palce中,稍后需要)
  • 运行导入(存储库现在拥有除冲突之外的所有项目中的最新项目)
  • 现在筛选最新的转储以仅包含冲突(稍后使用)
  • 运行现有SVN存储库的转储,不包括冲突路径
  • 筛选最新转储文件以仅包含冲突
  • 创建新的空存储库
  • 将旧回购协议移至安全位置
  • 将两个筛选的转储导入新存储库
  • 
    [svnrepos]$svndumpfilter排除冲突路径repo\u filtered\u woConflicts.dump
    [svnrepos]$svnadmin load REPONAMErepo\u filtered\u ConflictsOnly.dump
    [svnrepos]$svnadmin dump REPONAME | svndumpfilter排除冲突路径>repo_filtered_woConflicts.dump#覆盖以前的过滤器
    [svnrepos]$mv REPONAME REPONAME\u old
    [svnrepos]$svnadmin create REPONAME
    [svnrepos]$chmod-rg+rwx REPONAME#如果由apache共享
    [svnrepos]$svnadmin load REPONAME

    我想最后一行的意思是“svnadmin load”,而不是“svnadmin dump”。您可以通过
    svnadmin dump repo1 | svnadmin load repo2
    来传递这些命令,以加快速度。
    
        [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