假设:
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'
任何人都可以解释一下吗?
答案 0 :(得分:34)
原来,目标中的结构(空文件夹)需要预先创建。 所以, 如果你想这样做:
从 Repository_1 / Folder1 / Sub-folder (为此创建另一个转储)加载到 Repository_2 / trunk
你需要在中创建这个结构 SVN
<强> Repository_2 /中继/ Folder1中强>
注意:您只需要创建父项,而不是文件夹本身,所以不要创建 Repository_2 / trunk / Folder1 / Sub-folder
答案 1 :(得分:1)
如果有人从trunk / Folder1复制到trunk / Folder1 / Sub-folder,你会收到此错误。由于您只在转储中包含了trunk / Folder1 / Sub-folder,因此无法再从trunk / Folder1中找到所需的文件,并因此错误而停止。
要解决此问题,您必须确保在转储中包含作为副本源的所有内容。
答案 2 :(得分:1)
我刚遇到此错误,我追溯到最近的服务器升级和svnadmin dump/load
周期。问题是我在与其创建的目录不同的目录中设置了存储库。
在旧计算机上,我使用inetd.conf
来运行svnserve
:
svnserve -r /var/svn/main
并且存储库位于/ var / svn / main
中然而,在新机器上我inetd.conf
指向/var/svn
:
svnserve -r /var/svn
我已经从旧服务器进行了结帐,因此当我尝试提交目标路径时,由于我不小心在网址中添加了其他组件,因此svn://host/source/trunk
变为svn://host/main/source/trunk
。
我可以通过移动目录来修复它,但我选择使用svn switch --relocate
重写工作副本的URL。
注意:快速诊断以确定是否存在问题是更改到工作副本中的目录,键入svn info
以获取存储库URL,然后键入svn ls <myUrl>
。如果这出现No repository found
错误,那么您就知道这是原因。
答案 3 :(得分:1)
正如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
可能会更好。
答案 4 :(得分:0)
加载转储失败,因为trunk/Folder1
创建已由svndumpfilter过滤。根据{{3}},转储需要这些步骤:
您可以通过编辑转储本身在转储中创建trunk / Folder1,并将以下块添加到第一个修订版中:
Node-path: trunk/Folder1
Node-action: add
Node-kind: dir
Prop-content-length: 10
Content-length: 10
PROPS-END
此块必须插入第一个修订版的道具块中。
然后可以使用svnadmin加载转储。