3

我们的项目保存在 SourceSafe 数据库中。我们有一个自动构建,它每天晚上在专用的构建机器上运行。作为我们构建过程的一部分,我们从 SourceSafe 获取安装的源和相关数据。这可能需要相当长的时间,并且构成了构建过程的大部分(否则由安装文件的创建主导)。

目前,我们使用命令行工具 ,ss.exe与 SourceSafe 进行交互。我们使用的命令用于递归获取项目源和数据、检出版本文件、检入更新的版本文件和标记。但是,我知道 SourceSafe 也支持对象模型。

  • 有人对这个对象模型有任何经验吗?
  • 与使用在我们的流程中可能有用的命令行工具相比,它是否提供了任何优势?
  • 有什么缺点吗?
  • 我们会通过在命令行上使用对象模型获得任何性能提升吗?
4

6 回答 6

2

我应该想象命令行是在内部使用与您在对象模型中找到的相同代码实现的,因此除非需要大量启动,否则它应该不会有太大区别。

重写以使用对象模型的成本可能比让它保持原样所节省的成本要多。除非您对所花费的时间有明确的问题,否则我怀疑这对您来说是一个很大的解决方案。

您可以调查影子目录,以便始终提供最新版本,因此您不必每次都执行“getlatest”,并且可以确保您正在与本地 VSS 对话(因为所有命令都直接在文件系统,因此 WAN 操作非常昂贵)。

否则,除非您想使用不同的 SCM(我推荐 SVN - codeplex 上有一个出色的转换器可用,示例代码显示如何使用 VSS 和 SVN 对象模型),否则您会被卡住

于 2008-12-18T15:27:55.507 回答
1

此后,我们将源代码控制升级到了 Team Foundation Server。当我们使用 VSS 时,我在 CruiseControl.Net 构建日志中注意到了同样的事情(警告:我从未研究过 CC 使用什么;我假设是命令行)。

根据我的经验,我会说问题出在 VSS 上。我们的 TFS 位于 1000 多英里之外,并且比服务器被大约 6 英尺长的以太网电缆隔开时的速度更快。

编辑:戴上我的商务帽子,如果您将等待构建所花费的时间加上尝试加速构建所花费的时间可能足以保证升级或另一篇文章中提到的 VSS 附加组件(已经 +1它)。我不会花费您太多时间在 VSS 上构建解决方案。

于 2008-12-18T15:13:25.647 回答
1

VSS 使用挂载的文件系统来共享数据库。当您从 SourceSafe 获取文件时,它在文件系统级别工作,这意味着它不仅向您发送文件,而是向您发送磁盘的所有块以查找文件和文件。这增加了更多的交易和额外的数据。

当通过远程或慢速连接或大型项目使用 VSS 时,它几乎无法使用。

有一种产品在网络上使用时可将 VSS 的速度提高约 12 倍。它通过实现客户端服务器协议来做到这一点。这还可以被加密,这在通过 Internet 使用 VSS 时很有用。

我不工作或与他们有任何联系,我只是在以前的公司使用过。

请参阅 www.sourcegear.com 上的 SourceOffSite。

于 2008-12-18T15:23:31.430 回答
1

在回答您的问题中似乎有任何实质内容的唯一部分 - 切换到对象模型不会更快,因为“缓慢”来自用于在 VSS 和数据库之间共享文件的协议 - 请参阅我的其他答案。

我提到的产品与 VSS 一起工作以解决您遇到的问题。你仍然使用 VSS 和 ahev 来获得使用它的许可证……它只是在你需要的地方加速它。

不知道你为什么标记我?!

于 2008-12-18T16:29:22.107 回答
0

我打赌运行对象模型会慢至少 2 小时.... ;-)

于 2008-12-18T18:32:59.813 回答
0

命令行工具是如何使用的?您不是偶然每个文件调用一次该工具吗?

听起来不像('recursive get' 几乎暗示你不是),但我想我会把这个想法扔进去。其他人可能会遇到与你类似的问题,这在源代码控制系统中似乎非常普遍。

一个客户端的 ClearCase 表现得像一条完整的狗,因为客户端的后端脚本就是这样做的。每个命令行调用都会创建一个连接、验证用户身份、获取文件并关闭连接。数万次。哦,命令行界面和一点 Perl 的危险。

使用 API,您很可能在操作之间正确地保持会话打开。

于 2008-12-18T18:50:41.807 回答