在我工作的软件开发环境中,我们有一组开发人员都在同一个(Java)代码库中工作(目前使用 SVN)。我注意到人们希望经常提交他们构建的内容,而不会“破坏构建”。因此,正是出于这个原因,我正在研究像 Git 和 Mercurial 这样的工具,它们可以让分支,尤其是合并变得更加容易。
我看到的一件事是,如果开发人员提交了“错误代码”,那么每个人的代码都会被破坏。作为避免这种情况的一个想法,我想要一种拥有“中间单一功能”存储库的方法,它只是当前的“主控”,只有该单一新功能的一个变更集。这样的“中间单一功能”存储库可以在成为主要代码库的一部分之前进行自动测试(代码质量、单元测试、手动代码检查等)。
所以我想到的工作流程看起来像这样:
- 开发人员每天创建一个新功能并在本地提交。
- 一段时间后,开发人员完成并提交整个变更集以集成到“主”存储库中。
- 持续集成系统采用当前的“主控”,应用变更集并检查代码(合并冲突、PMD、Findbugs...)、运行单元测试、检查编码风格等。
- 如果 CI 系统判定为“错误代码”,则通知开发人员原因,开发人员必须修复上述问题。在这种情况下,主存储库保持不变。
- 如果 CI 系统决定“足够好”,则代码会到达“首席开发人员”或“代码审查员”,他们检查所选解决方案并批准或拒绝它。
- 然后将批准的变更集包含到主存储库中,并可供所有开发人员使用 rebase/merge 。
我对这种工作流程有一些疑问:
- 你认为这在实践中会运作良好(即这是一个好主意还是一个真正的脑残)?
- 你们中的任何人以前有过这样的工作吗?优点和缺点是什么?
- 是否有一个“准备好运行”的脚本/程序/工具/...可以在最短的时间内快速启动这样的工作流程(或这个想法的变体)?
谢谢。
背景说明:
大约 13 年前,我曾在一家公司担任开发人员,他们在内部构建了类似的工作流程,并且他们有两个夜间构建:
- “生产”版本:主要代码库
- '高级版本:包含所有更改文件的所有新提交版本的主代码库。
因为这都是基于 SCCS(锁定-编辑-解锁模型)的,所以无法“经常提交”,因此代码更改和所有其他类型的不良影响都会出现死锁。我正在寻找的主要是关于我当时使用今天更好的工具的好东西。