重新排序subversion存储库失败

时间:2014-07-03 04:56:33

标签: svn sed svnadmin svn-repository

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

例如,我想"移动"以下目录(事实上,它更多,但我现在一步一步地做):

project1/common/bib -> trunk/pub/common/bib

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

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 ...

我不知道为什么这不起作用,因为我更愚蠢地替换每个条目!

1 个答案:

答案 0 :(得分:1)

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 魔法,新存储库无法创建 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 ...

有时这可行。但大部分时间都失败了。

解决方案:

就个人而言,我会使用带有很好的搜索和替换功能的文本编辑器(例如 vim ),并替换所有“project1”,“project1 / common”和“project1 / common / bib”外观

相关问题