27

鉴于:

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'

谁能解释一下?

4

5 回答 5

34

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

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

你需要在svn中创建这个结构

Repository_2/trunk/Folder1

注意:您只需要创建父母,而不是文件夹本身,所以不要创建Repository_2/trunk/Folder1/Sub-folder

于 2010-03-02T17:06:50.460 回答
1

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

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

于 2010-03-01T22:17:06.147 回答
1

我刚刚经历了这个错误,我追踪到最近的服务器升级和一个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.

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

于 2010-10-28T21:13:37.500 回答
1

本线程所述,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可能会更好。

于 2017-05-03T23:03:41.890 回答
0

加载转储失败,因为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 加载转储。

于 2017-03-07T13:36:01.397 回答