【问题标题】:Performance in Subversion vs. SourceSafeSubversion 与 SourceSafe 中的性能
【发布时间】:2008-10-27 09:50:06
【问题描述】:

我们是一个由 5 名开发人员组成的分布式团队,致力于相当大的集成项目。我们目前使用 SourceSafe(是的,我知道它很糟糕,但它直到最近才有效,而且我们一直在使用它)。我们最近最大的问题是性能。签入和签出项目只需要很长时间,我们发现自己花了很多时间等待 SourceSafe(是的,我们已经关闭了防病毒检查和所有其他性能提升 trix - 它仍然很慢)。

我们现在正在考虑设置并将我们所有的东西转移到 Subversion。 与 Subversion 相比,SourceSafe 在 web 上的性能如何? 我猜历史记录并不那么重要(如果我们需要一个旧文件,我们可以返回 VSS 数据库)并且将文件实际移动到 Subversion 应该是个问题 - 对吧?

除了实际的 Subversion 核心工具之外,我还想就“必须拥有”的工具和附加组件提供一些意见。

【问题讨论】:

  • 您可能想稍微重命名您的问题,以强调性能部分:)
  • +1 “我只是在工作,但非常缓慢”:我完全同意!

标签: svn version-control visual-sourcesafe


【解决方案1】:

VSS的签入在SVN中称为commit。此操作要快很多倍,因为 SVN 只会传输您对文件所做的更改(也称为“差异”),而 VSS 将发送整个文件并在服务器上对其进行区分。

如果您使用 http(s) 并且文件总大小较大 (>100MB),则 SVN 中的 签出(获取初始工作副本)与其他系统相比有些慢. SVN 最坏的情况是很多文件和目录,因为 HTTP 传输将比大的单个文件慢得多。

但是,我怀疑 VSS 会比 SVN 快。 SVN 的整体性能比 VSS 更快、更健壮(无数据库损坏)且更易于理解。

不错的工具是 TortoiseSVN(Explorer Plugin)、smartSVn(VSS-lookalike) 和 commandline(flexible) 正如 Tigraine 在我的 cmets 中添加的那样:AnkhSVN(Visual Studio Integration) 和 Eclipse IDE 的颠覆性/subclipse

【讨论】:

  • 不是在服务器上区分它。 VSS 不是客户端/服务器体系结构。 VSS 客户端仅使用 Windows 文件共享来处理其数据库文件。
【解决方案2】:

您也可能会发现 this question 相关。

性能

单个操作在 SVN 和 VSS 中花费多长时间的主要区别在于 SVN 原则:操作时间应该与更改的大小成正比,而不是与项目的大小成正比。这在获取最新版本 (VSS) 与更新 (SVN) 中最为明显。 VSS“获取最新版本”总是遍历项目中的所有文件,检查它们的状态。这需要很长时间。与此相比,SVN 会检查项目历史记录并仅操作被触及的文件。在典型的场景中,这是一个巨大的胜利,因为通常只触及几个文件。即使触摸文件,在 SVN 中传输更改也比在 VSS 中快得多,因为与 VSS 中的整个文件相比,仅传输更改。 Commits (Checkin) 也是如此,SVN 在对大文件进行小的更改时速度要快得多。这也适用于二进制文件,因为 SVN 也能够对这些文件进行差分(使用 XDelta 作为其核心差分引擎)。

最重要的工具

对于 Visual Studio 开发人员来说,最重要的工具是:

  • TortoiseSVN - 通过 Windows Shell 访问存储库
  • AnkhSVN - Visual Studio 集成
  • 有些人还推荐 VisualSVN 作为 VS 集成,但我认为 AnkhSVN 2 的集成已经足够好了

我什至可以说拥有 TortoiseSVN 和 AnkhSVN 你根本不需要安装“Subversion 核心工具”。核心命令行工具非常有用,例如对于自动化,但对于一般的日常工作,我从不使用它们,并且 TortoiseSVN 或 AnkhSVN 工作不需要安装它们。

网络访问

SVN 原生支持通过 Web 访问,并且支持得非常好。对于VSS,你需要外部应用程序,虽然它们还不错,但它们与原始环境不是1:1的,它们的速度仍然有些不足。

如何转换

VSS2SVN 是一种工具,它可以相当快且相当好地执行转换。根据我们的经验,我强烈建议不要使用“稳定”构建,而是使用每日快照 - 它能够处理历史中的许多项目,从而使之前的构建完全失败。

我们已经成功地使用了最近的每日构建和一个历史悠久的庞大数据库,结果非常好。

【讨论】:

  • @suma:嘿,suma,感谢 AnkhSVN 的提醒,我几乎购买了 VisualSVN。我现在只是在尝试,但你知道吗,VisualSVN 或 AnkhSVN 是否足够灵活,以使存储库 db 可以移植,所以有时它会出现在网络上,有时会出现在我的 iPod 上。 .?欢呼
  • 你到底想做什么? db URL 将始终相同吗?请注意,使用 SVN 您可以执行一些基本操作(包括“与基数比较”)而无需联系 db(并且没有结帐,因此即使离线也绝对可以开始编辑)。
【解决方案3】:

使用 Subversion 可以更轻松地进行远程访问。

如果您不关心保留历史记录,那么从 VSS 迁移到 subversion 也很容易。您只需手动删除源代码控制绑定(*.scc 文件)。

至于工具,您可能想要获取 TortoiseSVN,并且可能想要一个用于 Visual Studio(如果您正在使用的话)的插件,例如 Ankh SVN(免费)。

【讨论】:

    【解决方案4】:

    如果您确实关心保留历史记录,那么http://www.pumacode.org/projects/vss2svn 将从一个存储库转换到另一个存储库。

    我在这方面取得的成功非常有限,这也是我们仍然使用源代码安全的原因之一。

    【讨论】:

      【解决方案5】:

      Visual SourceSafe 建立在文件共享之上。因此,当您在文件中预订时,一切都是使用文件系统完成的。因此,当访问 vss 服务器时,VSS 不仅将文件文本发送到服务器,而且远程发生的所有事情都从磁盘访问物理块。包括在共享磁盘目录中查找文件等...这比客户端服务器定制协议慢大约 10 倍。

      有一个名为 SourceOffSite 的产品,它为 VSS 数据库添加了一个更快的前端,这使得 VSS 可用于较慢的链接。

      托尼

      【讨论】:

        【解决方案6】:

        根据我的经验,它会快得多。

        我没有在 VSS 和 SVN 中使用过同一个大型项目,但我在每个项目中都做了不同的项目,并将一个较小的项目从 VSS 迁移到 SVN。

        有些事情要快得多。特别是,签入/提交大量文件会产生一条警告消息,类似于“这将花费很长时间并且可能实际上不起作用?您是否仍要尝试这样做?” (这并不是它所说的那样)。

        在 VSS 中实际上不可能提交大量更改 - 您必须进行多次小提交,从而使项目处于暂时中断的状态(尽管它没有原子提交,所以在某些情况下会发生这种情况无论如何点)。

        【讨论】:

          【解决方案7】:

          我同意@relentless 关于颠覆的观点,但我更喜欢使用命令行。这需要一点时间来学习,但是一旦你学会了,你会更快。

          另外,如果性能是一个重要问题,您可能想看看http://git.or.cz/,它声称非常快速和可靠。

          【讨论】:

          • 如果你只是一组 5 名开发人员,迁移到 Git 应该不会太难。
          • 是的......但是我们正在使用很多 BizTalk 工件,我不确定它会如何工作
          【解决方案8】:

          TortoiseSVN 确实是一个非常不错的客户端,我将它与服务器上的Trac 结合使用,以通过网络访问存储库和一个不错的 wiki / 票证系统。

          LiveCD - link.

          【讨论】:

            猜你喜欢
            • 2012-05-19
            • 2010-11-13
            • 2013-06-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-20
            相关资源
            最近更新 更多