Subversion大型仓库导入/检出

7
我的正常工作流程是使用subversion创建一个新的代码库,然后检出代码库根目录,创建分支、标签和主干文件夹,并将初始文件放在主干中。接着我会提交这个“初始导入”,从我的硬盘中删除已经检出的代码库,然后再次检出主干。这样就可以开始工作了。
然而,当处理大量数据导入时,比如数百兆字节,而且使用远程版本控制托管(基于http协议),这个初始导入可能需要很长时间才能完成提交。更糟糕的是,在提交之后,我需要再次检出这个庞大的主干。
有没有一种方法可以在不再次检出已经存在的数据的情况下使用本地副本呢?
5个回答

14

有一种方法叫做“原地导入”,在Subversion FAQ中有相关介绍:

http://subversion.tigris.org/faq.html#in-place-import

实际上你所做的是在仓库里创建一个新的空项目,在本地文件夹检出这个空项目(使其成为工作副本),然后将所有(已经存在的)文件添加到该“空”项目中,当你执行svn commit时,这些文件就会被添加到版本库中。


4
我同意“原地导入”程序并使用脚本进行TTB结构(两者都已点赞)。
小提示:
如果您使用http(s),则不应在单个提交中导入大量(数万个)文件,因为显示版本历史的时间会随着添加条目的数量而增加。这种行为的原因是apache必须针对svnaccess文件对所有添加的路径进行身份验证(当然,仅在启用基于路径的授权时)。这可能使您的存储库无法使用,因为所有文件都必须等待大型修订的svn日志。
您应将大型导入分成目录级别。

有时候你会接手一个已经存在一段时间但从未进行版本控制的项目。使用视频资源的项目可能会变得非常庞大。 - Luke
这没问题,只有文件数量计算在内,而不是它们的大小。而且这仅适用于Apache,而不是SVN服务器本身。 - Peter Parker

2

我通常会在创建仓库后立即使用 "svn mkdir" 在服务器上直接创建主干/标签/分支。然后,我可以检出空的主干,在其中移动我的初始文件,添加并提交它们,然后开始工作。


个人而言,我不喜欢这样做,因为它会在我的代码库中创建许多不必要的修订记录。我更喜欢检出根目录,创建所需的结构,然后对新结构进行一次提交。 - Luke
卢克:可以说,您的源代码控制存储库最终将包含大多数“不必要的修订版本”,因此我不确定一个额外的提交会有什么区别。(您可以使用“svn mkdir dir1 dir2 dir3 -m whatever”一次创建所有三个目录) - Greg Hewgill

2

svn checkout --force 允许你在现有路径上检出一个工作副本。它会保留你的旧文件,并添加仅在你的代码库中存在的文件。

如果要创建你的代码库: 你可以使用“svnmucc”命令在单个提交中执行多个mkdir命令来创建代码库,该命令在大多数Subversion发行版(例如SlikSVN)中都可用。

键入 svnmucc 而不带参数以获取一些帮助信息。


1
如果您已经检出了一个文件夹,将文件复制到其中,运行svn addsvn commit;那么您就不需要删除文件并重新检出。
直接使用原地的文件:一旦按照您所描述的提交了它们,它们就可以被处理了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接