3

在我工作的软件开发环境中,我们有一组开发人员都在同一个(Java)代码库中工作(目前使用 SVN)。我注意到人们希望经常提交他们构建的内容,而不会“破坏构建”。因此,正是出于这个原因,我正在研究像 Git 和 Mercurial 这样的工具,它们可以让分支,尤其是合并变得更加容易。

我看到的一件事是,如果开发人员提交了“错误代码”,那么每个人的代码都会被破坏。作为避免这种情况的一个想法,我想要一种拥有“中间单一功能”存储库的方法,它只是当前的“主控”,只有该单一新功能的一个变更集。这样的“中间单一功能”存储库可以在成为主要代码库的一部分之前进行自动测试(代码质量、单元测试、手动代码检查等)。

所以我想到的工作流程看起来像这样:

  1. 开发人员每天创建一个新功能并在本地提交。
  2. 一段时间后,开发人员完成并提交整个变更集以集成到“主”存储库中。
  3. 持续集成系统采用当前的“主控”,应用变更集并检查代码(合并冲突、PMD、Findbugs...)、运行单元测试、检查编码风格等。
  4. 如果 CI 系统判定为“错误代码”,则通知开发人员原因,开发人员必须修复上述问题。在这种情况下,主存储库保持不变。
  5. 如果 CI 系统决定“足够好”,则代码会到达“首席开发人员”或“代码审查员”,他们检查所选解决方案并批准或拒绝它。
  6. 然后将批准的变更集包含到主存储库中,并可供所有开发人员使用 rebase/merge 。

我对这种工作流程有一些疑问:

  • 你认为这在实践中会运作良好(即这是一个好主意还是一个真正的脑残)?
  • 你们中的任何人以前有过这样的工作吗?优点和缺点是什么?
  • 是否有一个“准备好运行”的脚本/程序/工具/...可以在最短的时间内快速启动这样的工作流程(或这个想法的变体)?

谢谢。


背景说明:

大约 13 年前,我曾在一家公司担任开发人员,他们在内部构建了类似的工作流程,并且他们有两个夜间构建:

  1. “生产”版本:主要代码库
  2. '高级版本:包含所有更改文件的所有新提交版本的主代码库。

因为这都是基于 SCCS(锁定-编辑-解锁模型)的,所以无法“经常提交”,因此代码更改和所有其他类型的不良影响都会出现死锁。我正在寻找的主要是关于我当时使用今天更好的工具的好东西。

4

2 回答 2

2

在我目前工作的公司,我们考虑过使用这种方法。最后我们选择使用更简单的东西。我们让自动构建在成功构建后设置一个标签,并且我们有一个用于同步到该标签的工具。因此,当有人破坏构建时,其他人仍然能够从存储库中获取工作版本。同步工具还确保如果您刚刚提交了某些内容,您的更改不会被属于该标签的修订所取代。对我们来说,这项工作非常完美,但可能不适合您的情况。

问候,

塞巴斯蒂安

于 2009-07-10T10:40:19.947 回答
2

TeamCity 具有预测试提交功能。

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

于 2009-07-10T10:44:22.463 回答