在我的工作中,我们目前使用Aegis版本控制/ SCM.我们配置它的方式,我们有一堆测试,它强制以下事情是真实的,然后才能集成更改:
必须运行完整的测试集.
所有测试都必须通过.
通过测试驱动开发(TDD),这些似乎是明智的要求.但我还没有听说过任何其他版本控制系统可以做到这一点.(我们目前不打算转换,但我想知道将来如何不使用Aegis.)
我会对任何可以做到这一点的VCS(分布式或非分布式)感兴趣,我也对现有VCS的任何插件/扩展感兴趣.优选地是开源软件.
ETA:好的,似乎通常要做的是拥有VCS +持续集成软件,并且运行测试是作为构建的一部分自动化的,而不是单独的步骤.如果我理解正确,那仍然允许您提交未通过测试的代码,只是您收到通知 - 是吗?有什么东西可以阻止你完全集成/提交它吗?
IMO你最好使用像CruiseControl或Hudson这样的持续集成系统,如果你想强制你的测试通过,并根据测试结果进行构建而不是签入.这些工具设置简单,您可以通过网页获得结果内置通知(通过电子邮件,RSS或浏览器插件)和测试结果报告的优势.
关于问题的更新,您是对的 - VCS + CI允许您提交未通过测试的代码; 对于大多数CI设置,除非所有测试都通过,否则您将无法获得产品的最终版本.如果你真的想要阻止任何人提交,除非所有的测试都通过,你将不得不像其他人建议的那样使用VCS中的钩子.然而,这在我看来很难处理 - 要么开发人员每次进行签到都必须运行所有测试,包括与他们正在制作的签入无关的测试,或者你必须制作一些非常精细的VCS钩子,只运行与给定签入相关的测试.根据我的经验,依靠开发人员在本地运行相关测试并让CI系统偶尔发现错误会更有效率.