我们有一个Subversion存储库,其中包含一个目录:
虽然我知道高版本号不是问题,但是我想将这个单个目录从我的主存储库中拉出来,然后再将其作为第二个,最理想的新目录。
最好的流程是什么?如果它有所不同,SVN存储库托管在(...检查...)FreeBSD机器上。
值得注意的是,虽然我需要在新存储库中保留版本历史记录,但是没有必要删除旧版本中的内容;它可以坐在那里,因为我所关心的一切。
答案 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
即可仅检出该文件夹。