SVN加载转储到精确文件夹

时间:2014-06-10 18:57:16

标签: svn version-control svndump

拥有一个带有一个分支的标准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;

1 个答案:

答案 0 :(得分:3)

在SVN图书中仔细阅读认真,完整 Filtering Repository History,警告特别注意

您忘了,转储文件包含文件中转储节点中包含的所有相对路径,而--parent-dir仅更改转储节点中提到的起始挂载点,而不是相对位置

  

每个转储文件都将创建一个有效的存储库,但会保留与原始存储库中完全相同的路径。这意味着即使您只有一个用于calc项目的存储库,该存储库仍然会有一个名为calc的顶级目录。如果您希望主干,标记和分支目录存在于存储库的根目录中,您可能希望编辑转储文件,调整Node-pathNode-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