拥有一个带有一个分支的标准subversion布局:
Repo_1 的
repo_root
|-branches
|-branch_one
|-tags
|-trunk
第二个存储库,
Repo_2 的
repo_root
|-branches
|-tags
|-trunk
|-folder1
我想将 Repo_2 / trunk / folder1 内容导出到 Repo_1 / branches / branch_one / folder1
我正在进行文件夹转储:
svnrdump dump svn://mysvnserver/Repo_2/trunk/folder1 > folder1.dump
然后将其加载到我的 Repo_1 :
svnadmin load Repo_1 --parent-dir branches/branch_one < folder1.dump
获得以下 Repo_1 结构:
repo_root
|-branches
|-branch_one
|-trunk
|-folder1
|-tags
|-trunk
获取我不需要的行李箱文件夹。有没有办法将我的&#34;文件夹1&#34; 直接插入&#34; branch_one&#34; ?
答案 0 :(得分:3)
在SVN图书中仔细阅读认真,完整 Filtering Repository History,警告特别注意
您忘了,转储文件包含文件中转储节点中包含的所有相对路径,而--parent-dir
仅更改转储节点中提到的起始挂载点,而不是相对位置
每个转储文件都将创建一个有效的存储库,但会保留与原始存储库中完全相同的路径。这意味着即使您只有一个用于calc项目的存储库,该存储库仍然会有一个名为calc的顶级目录。如果您希望主干,标记和分支目录存在于存储库的根目录中,您可能希望编辑转储文件,调整
Node-path
和Node-copyfrom-path
标题,以便它们不再具有该标题第一个计算/路径组件
根据我自己的经验,我更喜欢使用svndumpfilter include
的始终过滤器转储,即使转储是使用svnrdump仅为repo-tree的一部分创建的:它产生较少的(0)错误或{ {1}}。例如,将远程svnadmin load
移动到本地存储库上的相同路径(默认存储库树已存在)对我意味着
REPO/trunk/lib
(>svnrdump dump URL/trunk/lib > full.dmp
>svndumpfilter include --pattern "*lib*" --drop-empty-revs --renumber-revs < full.dmp > filtered3.dmp
只是因为普通include --pattern
产生了更糟糕的结果,但它只能与手相关了问题)
和此过滤转储可以轻松加载
include lib
而“哑”转储
>svnadmin load Repo --parent-dir / < filtered3.dmp
<<< Started new transaction, based on original revision 1
* adding path : trunk/lib ... done.
* adding path : trunk/lib/lib01.txt ... done.
------- Committed new rev 2 (loaded from original rev 1) >>>
在加载尝试时给出错误
>svnrdump dump URL/trunk/lib > dump.dmp