【问题标题】:Svnadmin load from dumpfile causes "file not found error". Help?从转储文件加载 Svnadmin 导致“找不到文件错误”。帮助?
【发布时间】:2011-01-22 11:59:53
【问题描述】:

给定:

Repository_1 - 来源

Repository_2 - 目的地

我使用 svnadmin 和 svndumpfilter 组合创建了 Repository_1/Folder1 的转储文件

当从 Repository_1/Folder1 的转储文件加载到 Repository_2/Trunk 时,一切正常但是

当从 Repository_1/Folder1/Sub-folder(为此创建另一个转储)加载到 Repository_2/trunk 时,我收到以下错误:

svnadmin: File not found: transaction '267-89', path 'trunk/Folder1/Sub-folder'

谁能解释一下?

【问题讨论】:

    标签: svn dump svnadmin


    【解决方案1】:

    原来目标中的结构(空文件夹)需要预先创建。 所以, 如果你想这样做:

    当从 Repository_1/Folder1/Sub-folder(为此创建另一个转储)加载到 Repository_2/trunk

    您需要在 svn

    Repository_2/trunk/Folder1

    注意:您只需要创建父文件夹,而不是文件夹本身,因此请勿创建 Repository_2/trunk/Folder1/Sub-folder

    【讨论】:

    【解决方案2】:

    如果有人将某些内容从trunk/Folder1 复制到trunk/Folder1/Sub-folder,您会收到此错误。由于您只在转储中包含了trunk/Folder1/Sub-folder,因此它无法再从trunk/Folder1 中找到所需的文件并停止并出现此错误。

    要解决这个问题,您必须确保在转储中包含作为副本来源的所有内容。

    【讨论】:

      【解决方案3】:

      我刚刚遇到了这个错误,我追踪到最近的服务器升级和svnadmin dump/load 循环。问题是我将存储库设置在与创建它的目录不同的目录中。

      在旧机器上,我使用inetd.conf运行svnserve

      svnserve -r /var/svn/main
      

      并且存储库位于 /var/svn/main

      但是在新机器上我有inetd.conf 指向/var/svn

      svnserve -r /var/svn
      

      我已经从旧服务器结帐,所以当我尝试提交时目标路径不存在,因为我不小心在 URL 中添加了另一个组件,所以svn://host/source/trunk 变成了svn://host/main/source/trunk

      我可以通过移动目录来修复它,但我选择使用 svn switch --relocate 重写工作副本的 URL。

      注意:快速诊断以确定是否存在问题的方法是切换到工作副本中的目录,输入 svn info 以获取存储库 URL,然后输入 svn ls <myUrl>。如果这给出了 No repository found 错误,那么您知道这是原因。

      【讨论】:

        【解决方案4】:

        this thread 中所述,svnrdump 的工作方式与 svndump 不同。

        svndump + svndumpfilter:

        • 转储整个存储库历史记录,然后过滤您想要的内容。即使您只是抓取一个很小的子树,这在大型存储库上也需要很长时间。
        • 生成的转储文件可能因多种方式损坏,例如在不存在的目录中创建文件或从不存在的路径复制文件。

        svnrdump:

        • 生成一个自洽的转储文件。
        • 如果要执行 svndumpfilter include 的等效操作,则需要子路径。例如,svnrdump https://server.example.com/svn/repo/branches/1.4 将获取所有影响 /branches/1.4 的修订。
        • 可能需要额外的| svndumpfilter include / --drop-all-empty-revs --renumber-revs

        底线:svnrdump 可能会更好。

        【讨论】:

          【解决方案5】:

          加载转储失败,因为 trunk/Folder1 创建被 svndumpfilter 过滤。根据this blog post,转储上需要这些步骤:

          您可以在转储中创建trunk/Folder1,方法是编辑转储本身并将以下块添加到第一个修订版:

          Node-path: trunk/Folder1
          Node-action: add
          Node-kind: dir
          Prop-content-length: 10
          Content-length: 10
          PROPS-END
          

          这个块必须插入到第一个版本的 props 块中。

          然后可以使用 svnadmin 加载转储。

          【讨论】:

            猜你喜欢
            • 2021-12-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-05
            • 2014-04-20
            • 1970-01-01
            • 2013-10-18
            相关资源
            最近更新 更多