将 SVN 存储库的一部分合并到另一个具有历史记录的存储库
Posted
技术标签:
【中文标题】将 SVN 存储库的一部分合并到另一个具有历史记录的存储库【英文标题】:Merging a part of SVN repository to another repository with history 【发布时间】:2011-04-07 10:21:05 【问题描述】:我必须 svn 存储库,比如说 A
和 B
。我想将B的一些目录与历史一起添加到A中。是否可以这样做。为了更清楚,以下是场景。
repo A repo B
\branches \branches
\sub-branch1 \sub-branch B1
\sub-branch2 \sub-branch B2
\trunk \trunk
我想做的是,在repo A的分支中添加sub-branch2。怎么做?
提前致谢
【问题讨论】:
【参考方案1】:获取 repoB 的 sub-branch2 的转储:
svnadmin dump /location/of/repoB | svndumpfilter include subbranch2 > my.dump
将转储合并到 repoA 的分支中:
svnadmin load /location/of/repoA --parent-dir branches < my.dump
【讨论】:
我试过了,但结果很糟糕,可能是我做错了。我以前的历史都丢失了。 parent-dir 是否仅指定***目录。我的存储库的真实架构比我在一个问题中提到的要深 1 级。如果我可以恢复该过程,你能建议我吗? 还原是什么意思?只需从 repoA 中删除您不需要的目录 - 没有对 repoB 进行任何更改。加载过程必须显示一些消息,这些消息将帮助您了解问题所在。 empty revision for padding. 是我得到的错误,并且该目录也没有添加到指定目录中。您能告诉我这是什么原因吗? 您可以尝试删除使用以下命令填充的空修订:svnadmin dump /location/of/repoB | svndumpfilter --drop-empty-revs --renumber-revs 包括 subbranch2 > my.dump【参考方案2】:是的,这是可能的。您需要使用svnadmin dump
和svnadmin load
。
欲了解更多信息,请看这里:http://blogs.nuxeo.com/dev/2006/04/dump-load-svn-repositories-using-svnadmin-svndumpfilter.html
【讨论】:
我读了这篇文章。它很有帮助。但我有一个疑问,如何指导转储文件的位置。我认为 svnadmin load 会将转储文件驻留在根位置。如何操纵该位置以便我可以保留在所需的位置?> 阅读我的回复以获得答案。您可以在 svnadmin load 命令中指定父目录。 对加载命令使用 --parent-dir 选项。有关示例,请参见 jjossarin 的答案。以上是关于将 SVN 存储库的一部分合并到另一个具有历史记录的存储库的主要内容,如果未能解决你的问题,请参考以下文章
如何将一些文件从一个 git repo 移动到另一个(不是克隆),保留历史记录
如何将分支内容移动到另一个存储库保留历史记录并避免复制原始存储库的完整历史记录?
sh 将子目录从一个git存储库移动到另一个git存储库的子目录,而不会丢失提交历史记录。