English 中文(简体)
我如何从我的SVN存储库中提取子树并创建一个新的存储库?
原标题:
  • 时间:2009-02-19 04:38:43
  •  标签:

我们有一个Subversion仓库,其中有一个目录是:

  • Not really in need of revision control beyond the capabilities of RCS
  • Not versioned in conjunction with anything else in the repository
  • Modified about six times as often as the rest of the repository

虽然我知道高版本号不是问题,但我仍然希望将这个单独的目录从我的主要代码库中提取出来,并放到第二个、理想情况下是全新的代码库中。

哪种方法是最好的?如果有区别的话,SVN仓库托管在(检查)FreeBSD机器上。

值得注意的是,虽然我需要在新仓库中保留版本历史,但并没有必要抹掉旧仓库中的内容;它可以就这样保留着,我并不介意。

最佳回答

您可以使用 svnadmin dumpsvnadmin load 从原有的版本库创建一个新的版本库;然后将不完全符合您方案的目录复制到更好的位置,然后删除其他所有内容。在原始版本库中,您只需删除不符合的目录即可。这样可以保留所有历史记录,并且最终获得两个版本库。

可能有一种方式可以随后清理历史记录中无用的部分(svndumpfilter), 但由于硬盘空间相当便宜,我认为这并不必要。不管怎样,《SVN文档》都有关于它的所有信息。

问题回答

推荐的方法是使用 svnadmin dump,然后使用 svndumpfilter 工具过滤转储文件(参见 svnbook)。

例如,我有一个名为“Model”的顶级目录的存储库,我想将其移动到自己的存储库中:

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子目录的新存储库。

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

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

我想要将该目录导出(而非检出),导入到新的代码库中,接着从原有的代码库中删除它(当然,要带上去向信息的日志记录;-)。

那或许是或不是做这件事情的“最好”方式...

我不知道我是否理解得正确,但是有一个不错的解决方案。如果你原始的仓库在svn://domain处,你经常使用的文件夹叫做"folder",我相信你可以简单地执行以下命令:svn co svn://domain/folder只检出那个文件夹。





相关问题
热门标签