标题说明了一切:) 我想要的是从一个项目转储文件夹并将其存储到另一个项目。两个文件夹(src:proj1 / trunk / supplies,dest:extlibs / trunk)都在同一个存储库中。我的问题是,当我加载“普通”转储文件时,保留上一个文件夹的路径,并将在新位置(extlibs / trunk / proj1 / trunk / supplies)重新创建。所以我试图用win7 powershell手动更改路径:
svnrdump dump https://localghost/svn/test_repo/proj1/trunk/supplies | \
% {$_ -replace "Node-path: proj1", "Node-path: extlibs"} | \
% {$_ -replace "Node-path: extlibs/trunk/supplies", "Node-path: extlibs/trunk"}|\
Out-File foo.dmp
或者,我也使用了这个命令行:
svnadmin dump <local svn dir> | svndumpfilter include proj1/trunk/supplies | \
% {$_ -replace "Node-path: proj1", "Node-path: extlibs"} | \
% {$_ -replace "Node-path: extlibs/trunk/supplies","Node-path: extlibs/trunk}|\
Out-File foo.dmp
但是,当我使用svnadmin load或svnrdump load来上传路径修改的转储文件时,我收到“malformed dumpfile header”错误。如果我手动更改路径,我会得到MD5校验和错误。我真的很困惑如何更改powershell的输出以使转储加载工作。我试过了
.. | Out-File -Enc UTF foo.dmp
.. | Out-File -Enc ASCII foo.dmp
有人知道如何更改dumpfile的文件夹路径吗?我的方法是正确的还是有更好的方法来改变回购路径?
我知道有一些工具,但我现在不能使用它们。为了得到更深入的了解,我必须“手工”做到这一点,但似乎我觉得太复杂了。
感谢您的帮助和时间。我希望你们中的一个人知道如何解决这个问题。
答案 0 :(得分:2)
svndumpfilter
--parent-dir
svnadmin load
个选项
请阅读此处,SO,主题SVN: how to merge tags from separate projects和(链接回答)Using svndumpfilter to extract a folder in it's own repository blog-post
答案 1 :(得分:1)
@Lazy Badger:实际上是你可以编辑转储文件的SVN redbean书clearly proscribes,这是因为你预期会在没有改变行终止符的情况下小心地这样做。事实上,对于所讨论的示例场景,他们引用编辑Node-path和Node-copyfrom-path来改变转储文件的恢复路径:
如果您需要trunk,tags和branches目录 要生活在存储库的根目录中,您可能希望编辑转储文件,调整Node-path和Node-copyfrom-path标头,以便它们不再具有第一个计算/路径组件。
当使用cvs2svn转储CVS repos以导入到不同的SVN结构时,我已多次这样做了。我首先创建dumpfile,然后在将转储文件加载到SVN之前使用sed修改Node-path和Node-copyfrom-path头。工作正常。
这是一个快速的&amp;我使用的脏shell脚本(警告:没有错误检查,所以使用风险自负)。必须从根节点路径开始指定旧路径和新路径。
用法:&lt; script&gt; &LT;转储文件&GT; &LT; oldpath&GT; &LT; NEWPATH&GT;
#!/bin/bash
echo "Replacing path starting with '$2' with '$3' in file $1..."
sed -ri -e 's@^Node-path: '$2'(/|$)@Node-path: '$3'\1@' -e 's@^Node-copyfrom-path: '$2'(/|$)@Node-copyfrom-path: '$3'\1@' $1