如何从SVN存储库中提取子树到新的子树?

时间:2009-02-19 04:38:44

标签: svn system-administration

我们有一个Subversion存储库,其中包含一个目录:

  • 不需要超出RCS功能的版本控制
  • 未与存储库中的任何其他内容一起版本化
  • 修改大约是存储库其余部分的六倍

虽然我知道高版本号不是问题,但是我想将这个单个目录从我的主存储库中拉出来,然后再将其作为第二个,最理想的新目录。

最好的流程是什么?如果它有所不同,SVN存储库托管在(...检查...)FreeBSD机器上。

值得注意的是,虽然我需要在新存储库中保留版本历史记录,但是没有必要删除旧版本中的内容;它可以坐在那里,因为我所关心的一切。

4 个答案:

答案 0 :(得分:6)

您可以使用 svnadmin dump svnadmin load 从原始存储库创建新存储库;然后将不适合您的方案的目录复制到更好的位置,然后删除其他所有内容。在原始存储库中,您只需删除不适合的目录。这样可以保持所有历史记录的完整性,并最终得到两个存储库。

可能有一种方法可以随后从历史中无用的部分清除这两个存储库( svndumpfilter ),但由于硬盘空间非常便宜,我认为这不是必需的。无论如何,SVN documentation拥有关于它的所有信息。

答案 1 :(得分:0)

建议的方法是使用svnadmin dump,然后使用svndumpfilter工具过滤转储文件(请参阅svnbook)。

例如,我有一个名为' Model'的顶级目录的repo,我想转移到它自己的仓库:

svnadmin dump my_orig_repo | svndumpfilter include --drop-empty-revs --renumber-revs Model >model_only.svndump
svnadmin load my_model_repo < model_only.svndump

只用Model子目录创建新的repo。

要将其从原始存储库中删除,您只需执行svn rm即可。这将从最新版本的repo中删除它,这是最简单的方法。

但是如果我的示例中的Model目录非常大,也许我本想完全从原始目录中删除它。我可以通过重复该过程来创建另一个排除它的过滤的svn转储文件。然后我会用没有排除目录的新原件替换原件。

答案 2 :(得分:-1)

我会导出(不是签出)目录,将其导入新的存储库,然后将其从原始目录中删除(当然有一条日志消息指示它的去向; - )。

这可能是也可能不是“最好”的方式......

答案 3 :(得分:-1)

我不知道我是否理解正确,但有一个很好的解决方案。如果您的原始存储库位于svn://域,并且您经常使用的文件夹称为“文件夹”,我相信您只需执行以下命令:svn co svn://domain/folder即可仅检出该文件夹。