SVN 负载转储到确切文件夹
Posted
技术标签:
【中文标题】SVN 负载转储到确切文件夹【英文标题】:SVN load dump to exact folder 【发布时间】:2014-06-10 18:57:15 【问题描述】:有一个标准的颠覆布局,只有一个分支:
回购_1
repo_root
|-branches
|-branch_one
|-tags
|-trunk
还有第二个存储库,
回购_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
获取我不需要的主干文件夹。有什么方法可以将我的 "folder1" 直接插入到 "branch_one" 中?
【问题讨论】:
加载到存储库后为什么不svn mv && svn rm
?
【参考方案1】:
重新阅读仔细完整 SVN Book中的Filtering Repository History,特别注意警告
您忘记了,转储文件包含文件内转储节点中包含的所有相对路径,--parent-dir
仅更改转储节点中提到的起始挂载点,而不是相对位置
您的每个转储文件都会创建一个有效的存储库,但会保留与原始存储库中的路径完全相同的路径。这意味着即使您有一个专门用于您的 calc 项目的存储库,该存储库仍然有一个名为 calc 的***目录。如果您希望您的主干、标签和分支目录位于存储库的根目录中,您可能希望编辑转储文件,调整
Node-path
和Node-copyfrom-path
标头,以便它们不再具有第一个 calc/ 路径组件
根据我自己的经验,我更喜欢 总是 使用 svndumpfilter include
过滤转储,即使转储是使用 svnrdump 创建的仅用于 repo-tree 的一部分:它产生较少 (0) 错误或 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
在加载尝试时给出错误
>svnadmin load repo2 < dump.dmp
<<< Started new transaction, based on original revision 1
* adding path : trunk ...svnadmin: E160020: File already exists: filesystem 'bcf62090-928b-9f49-8008-455204e6d81f', transaction '1-1', path '/trunk'
【讨论】:
以上是关于SVN 负载转储到确切文件夹的主要内容,如果未能解决你的问题,请参考以下文章