Git托管设置从开发人员那里获取,拒绝破坏提交?

时间:2010-11-04 21:13:49

标签: unit-testing git version-control build-automation

开发团队经常受到版本控制的构建暂时受损的困扰。整个团队的生产力可以在尝试从一个人破坏的构建中恢复时停止。

是否有软件可以通过不接受首先未通过测试的提交来阻止破坏版本控制中的构建的方式来托管Git?例如,使用场景可能如下所示:

  • 该软件在服务器上运行,该服务器不断从开发人员发布的Git存储库中提取修订版。
  • 对于每个撤销版本,软件会构建修订版并测试是否通过了单元测试。
    • 如果通过测试,则修订将合并到“稳定”分支。
    • 如果它没有通过测试,它将被拒绝并且修订版本不会合并到“稳定”分支中。开发人员被迫更正修订版并重新提交。
  • 默认情况下,开发人员从“稳定”分支中拉出应该永远不会被破坏的分支 - 在测试不会失败的意义上 - 并且由于他们花费更少的时间被破坏的构建阻止而更有效率。这种系统的有用性随着团队规模的增长而增长。

一些注意事项:

  • 在这种情况下,Git的预先提交钩子和类似物并不令人满意。解决方案应该是自动的,并在每次提交时在服务器端强制执行。
  • 寻找尽可能实施和思考的解决方案,而不是从头开始编写这样的系统。

3 个答案:

答案 0 :(得分:1)

我认为这更像是一个构建服务器功能,它与Git等VCS相连。 TeamCity确实对此有所支持,但我没有尝试过,所以我无法评论它实际上有多好。

http://www.jetbrains.com/teamcity/features/delayed_commit.html

哈德森家伙已经讨论了一段时间,但我还没有在发布中看到它。

http://wiki.hudson-ci.org/display/HUDSON/Designing+pre-tested+commit

答案 1 :(得分:1)

我们使用gerrit和哈德森。这也是android和Cyanogenmod的用法(以及许多其他用途)。

Gerrit允许代码审查和自动构建每个提交,并自动拒绝那些未通过测试的提交。

哈德森参加了测试。

哈德森:http://wiki.hudson-ci.org/display/HUDSON/Designing+pre-tested+commit

Gerrit:http://gerrit.googlecode.com

这个系统与repo工具配合使用,可以拥有大量的小型存储库,这样可以减少必须通过rebase手动处理的合并冲突。

注意:如果你有一个庞大的现有代码库,那么启动和运行是相当多的工作,但是完全值得。

答案 2 :(得分:0)

这是一个非常好的主意。 Bamboo非常自然地支持这一点。几位Bamboo客户以及Atlassian的团队都有这种精确的方法设置并且效果很好。 Bamboo有事件监听器,可以告诉(不轮询)何时将提交推送到'test verfication'repo,然后在推送到stable分支之前通过运行测试来验证它。 www.atlassian.com/bamboo