7

在我的工作中,我们目前使用Aegis版本控制/SCM。我们配置它的方式,我们有一堆测试,它强制以下事情是真实的,然后才能集成更改:

  • 必须运行全套测试。
  • 所有测试都必须通过。

对于测试驱动开发 (TDD),这些似乎是明智的要求。但我还没有听说过任何其他版本控制系统都可以做到这一点。(我们目前不打算切换,但我想知道将来如何在不使用 Aegis 的情况下进行切换。)

我会对任何可以做到这一点的 VCS(分布式或非分布式)感兴趣,我也对允许这样做的现有 VCS 的任何插件/扩展感兴趣。最好是开源软件。

ETA:好的,看起来通常的做法是拥有 VCS + 持续集成软件,并且作为构建的一部分自动运行测试,而不是作为一个单独的步骤。如果我理解正确,那仍然可以让您提交未通过测试的代码,只是您会收到有关它的通知-对吗?有什么东西会阻止你整合/提交它吗?

4

9 回答 9

5

如果您想强制测试通过,并根据测试结果进行构建而不是签入,那么IMO 最好使用像CruiseControlHudson这样的持续集成系统。这些工具设置起来很简单,您可以获得内置的结果通知(通过电子邮件、RSS 或浏览器插件)和通过网页报告测试结果的优势。

关于问题的更新,您是对的 - VCS + CI 允许您提交未通过测试的代码;对于大多数 CI 设置,除非所有测试都通过,否则您将无法获得产品的最终构建。如果您真的想阻止任何人甚至提交,除非所有测试都通过,您将不得不按照其他人的建议在 VCS 中使用钩子。但是,这在我看来很难处理 - 要么开发人员每次进行签入时都必须运行所有测试,包括与他们正在进行的签入无关的测试,或者您必须制作一些非常精细的 VCS 挂钩,仅运行与给定签入相关的测试。根据我的经验,依靠开发人员在本地运行相关测试并让 CI 系统发现偶尔出现的错误会更有效。

于 2009-03-25T17:20:24.037 回答
3

使用 subversion 和 git,您可以添加预提交挂钩来执行此操作。

听起来您需要查看持续集成(或变体)。

认为 Git 在应用补丁上也有一个钩子。

于 2009-03-25T11:16:47.673 回答
3

Subversiongit都通过预提交钩子支持这一点。

Visual Studio Team System 通过签入策略本机支持这一点。

我相信 Rational ClearCase 也支持它,尽管我从未见过它被证明过,所以我不能肯定地说。

于 2009-03-25T11:38:10.927 回答
2

我们使用gitbuildbot来做类似的事情,虽然不完全相同。我们为每个开发人员提供自己的 Git 存储库,并设置 buildbot 以在任何时间推送到其中一个存储库时进行构建。然后有人充当集成者,他可以检查 buildbot 状态、查看更改并合并他们的更改或告诉他们适当地修复某些东西。

这个工作流程有很多变体,你可以用 Git 做。如果您不想让某人手动集成,您可能会设置 buildbot 以在成功时运行脚本,该脚本会自动将该人的更改合并到主存储库中(尽管它必须处理以下情况自动合并不起作用,它还必须测试合并结果,因为即使是干净合并的代码有时也会引入其他问题)。

于 2009-03-26T03:24:49.343 回答
1

我相信像 Team City 这样的持续集成软件可以让你进行预提交构建和测试。我不知道有任何直接提供它的 vcs……可能有一些像您使用的那样,但我不熟悉它们。

于 2009-03-25T11:49:49.573 回答
1

您还可以在 Perforce 中使用预提交挂钩。而且,如果您是 .NET 商店,则可以将 Visual Studio 配置为需要“门控”签入。

于 2011-11-18T20:24:18.527 回答
0

带有自定义工作项的 VSTS,对吧?我认为使用它没有任何问题。内置报告。自动化的选择。为什么不?

于 2009-03-26T14:50:51.347 回答
0

我在这里所做的是遵循每个任务模式的分支,它可以让您测试已经提交给版本控制的代码,但仍然保持主线的原始状态。更多关于这种模式的信息

您可以在此处找到有关集成策略的更多信息,也可以在此处找到有关版本控制的 Mark Shuttleworth 的评论。

于 2009-04-15T09:43:08.377 回答
0

大多数 CI 实现都有一种机制来拒绝不符合所有标准的签入(最值得注意的是通过所有测试)。他们被称为不同的名字。VCS 应该做他们最擅长的事情。版本源代码。

于 2011-11-20T04:11:58.387 回答