4

我有一个带有 SVN 存储库的 HDD,它“死了”。在我设法恢复它之前,我在另一个 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 '----------------'

知道如何“合并”它们吗?如果有可能,当然……

4

3 回答 3

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/

于 2011-08-02T17:51:28.043 回答
1

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

第二部分导致负载冲突。

因此,与其重新迁移整个 CVS 存储库(这将花费数小时和数小时),我只是依靠我们的老朋友 svndumpfilter 来删除冲突的路径。

  1. 过滤最新的转储文件以排除冲突(保留原始转储文件,以后需要它)
  2. 运行导入(存储库现在具有除冲突之外的所有项目中的最新项目)
  3. 现在过滤最新的转储以仅包含冲突(稍后使用)
  4. 运行现有 SVN 存储库的转储,不包括冲突的路径
  5. 过滤最新的转储文件以仅包含冲突
  6. 创建新的空存储库
  7. 将旧仓库移至安全位置
  8. 将两个过滤后的转储导入新的存储库

    [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

于 2011-10-14T18:03:06.680 回答
0

在我的情况下,我刚刚从他们的路径中删除了 repos,在他们被删除后,他们让我将转储加载到 repos 位置。我做了这样的事情:

#删除旧仓库:

rm -rf repo_name1,repo_name2, ...., repo_name[n]

#加载回购:

svnadmin 加载 /path_to_repo/repo_name < /path_to_dump/repo_name.dump

于 2021-12-02T15:11:20.987 回答