Svn 重新排序subversion存储库失败

Svn 重新排序subversion存储库失败,svn,sed,svnadmin,svn-repository,Svn,Sed,Svnadmin,Svn Repository,我想重新排序subversion存储库;为此,我使用svnadmin dump、svnadmin load、svndumpfilter和sed 例如,我想“移动”以下目录(事实上,它远不止这些,但我现在一步一步地做): 为此,我对导出的转储文件执行以下命令: sed -i "s|Node-path: project1/common/bib|Node-path: trunk/pub/common/bib|g" repo.dump sed -i "s|Node-copyfrom-path: proj

我想重新排序subversion存储库;为此,我使用svnadmin dump、svnadmin load、svndumpfilter和sed

例如,我想“移动”以下目录(事实上,它远不止这些,但我现在一步一步地做):

为此,我对导出的转储文件执行以下命令:

sed -i "s|Node-path: project1/common/bib|Node-path: trunk/pub/common/bib|g" repo.dump
sed -i "s|Node-copyfrom-path: project1/common/bib|Node-copyfrom-path: trunk/pub/common/bib|g" repo.dump
但是,当我将其加载到新的/空的存储库中时,我得到:

<<< Neue Transaktion basierend auf Originalrevision 64 gestartet
svnadmin: Datei nicht gefunden: Transaktion »63-1r«, Pfad »trunk/pub/common/bib«
 * Füge Pfad hinzu: trunk/pub/common/bib ...
svnadmin dump确实会生成“project1”存储库的完整历史记录

然而,尽管可能,但在该历史记录中更改文件路径可能很棘手。您的sed命令很好,但它们可能只完成98%的工作。要正确更改历史记录,您需要对更改的历史记录文件进行更多的搜索和验证

下面是一个示例,说明了如果仅执行以下两个sed命令,可能会导致损坏:

假设在修订版5中添加并提交了公共目录,svndump将给出:

Node-path: project1/common
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END
您运行了不完整的sed magic,新存储库无法创建trunk/pub/common目录:

Node-path: project1/common # bad! should be: trunk/pub/common !!!
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END
从此时起,svn将尝试重新创建无效路径,从而提供:

<<< Started new transaction, based on original revision 2
svnadmin: File not found: transaction '1-1', path '/trunk/pub/common'
     * adding path : trunk/pub/common ...

您说您使用了
svndumpfilter
,但您没有指定您运行的命令。这没关系(只是为了包含/排除)。假设我根本没有svndumpfilter(这对于我的实验来说是正确的)。我想要的是将project1/common/bib移动到存储库(即其转储文件)中的trunk/pub/common/bib svn有一个本机命令(
svn mv URL1 URL2
),用于将存储库中的目录移动到同一存储库中的另一个位置。为什么不使用它来代替dump/sed/load呢?因为移动在历史记录中是可见的,历史记录有点被破坏等等。据我所知,dump/sed/load允许移动它们,就像它们一直在那里一样。因为它关系到我的回购协议的大结构,这就是我想要的
<<< Started new transaction, based on original revision 2
svnadmin: File not found: transaction '1-1', path '/trunk/pub/common'
     * adding path : trunk/pub/common ...