颠覆大型回购导入/结帐
Posted
技术标签:
【中文标题】颠覆大型回购导入/结帐【英文标题】:Subversion large repos import/checkout 【发布时间】:2010-09-15 10:13:11 【问题描述】:我用 subversion 创建新存储库的正常工作流程是创建一个新存储库,检查存储库根目录,创建我的分支标签和主干文件夹,并将我的初始文件放在主干中。然后我提交这个“初始导入”,从我的硬盘驱动器中删除签出的存储库并签出主干。然后我就可以开始工作了。
但是,在处理大型导入时,请考虑数百个兆,以及场外版本控制托管(基于 http),此初始导入可能需要相当长的时间才能提交。更糟糕的是,提交后我需要重新检查这个巨大的树干。
有没有一种颠覆方式来使用主干的本地副本,而无需重新检查已经存在的数据?
【问题讨论】:
【参考方案1】:有 - 它被称为“就地导入”,它在此处的 Subversion 常见问题解答中有所介绍:
http://subversion.tigris.org/faq.html#in-place-import
您真正要做的是在存储库中创建一个新的空项目,检查本地文件夹中的空项目 - 这会将您的文件夹变成工作副本 - 然后将所有(现有)文件添加到该“空” ' 项目,因此当您执行 svn 提交时,它们会被添加到存储库中。
【讨论】:
【参考方案2】:我同意“就地导入”程序以及使用 TTB 结构的脚本(两者都赞成)。
只是一个小提示:
如果您使用 http(s),则不应在一次提交中导入 大量(成千上万)个文件,因为显示版本历史记录的时间会按比例缩放添加的条目数。这种行为的原因是 apache 必须针对 svnaccess 文件对所有添加的路径进行身份验证(当然,仅当您启用了基于路径的授权时)。这可能会使您的存储库无法使用,因为所有文件都必须在 svn 日志上等待这个大版本。
您应该在目录级别划分大量导入
【讨论】:
有时您会获得一个已经存在了一段时间但从未受到版本控制的项目的所有权。使用视频资源的项目可能会变得非常大。 那没问题,只计算文件的数量,而不是它们的大小。而且这只适用于apache,不适用于svn服务器本身【参考方案3】:我通常在创建存储库后立即使用“svn mkdir”直接在服务器上创建主干/标签/分支。然后我可以检查空主干,将我的初始文件移动到该目录中,添加并提交它们,然后开始工作。
【讨论】:
我个人不喜欢这样做,因为它会在我的存储库中创建一堆不必要的修订。我更喜欢检查根目录,创建我需要的结构,然后对新结构进行一次提交。 Luke:可以说,您的源代码控制存储库最终将主要包含“不必要的修订”,因此我不确定额外的提交将如何产生影响。 (您可以使用“svn mkdir dir1 dir2 dir3 -m whatever”同时创建所有三个目录)【参考方案4】:svn checkout --force 让您可以“通过”现有路径签出工作副本。它保留您的旧文件并添加仅在您的存储库中的文件。
用于创建存储库:您可以使用大多数 Subversion 发行版中可用的“svnmucc”命令在一次提交中对存储库执行多个 mkdir 命令(例如SlikSVN)。
键入不带参数的 svnmucc 以获得帮助。
【讨论】:
【参考方案5】:如果您已检出单个文件夹,将文件复制到其中,请运行 svn add
和 svn commit
;您不需要删除文件并重新签出。
使用适当的文件:一旦按照您的描述提交,它们就可以开始工作了。
【讨论】:
以上是关于颠覆大型回购导入/结帐的主要内容,如果未能解决你的问题,请参考以下文章