https://martinfowler.com/articles/branching-patterns.html
可能是我目前看过的关于版本控制工作流最好的一篇文章了,很全也很细。前前后后读了好多遍,感觉每次都有新收获。
下面是我的以下感想:
- 开源项目的 flow 和商业项目的完全是两回事,前者适合功能分支模式,后者最好的是持续集成。但很多时候对开源的货物崇拜导致了很多商业项目也去附和开源项目的 flow 。
- 集成频率和测试代码是持续集成的关键,前者通过频率来减少合并的痛苦(冲突),后者保证了主线的健康性。功能分支在持续集成里反而是可有可无的东西。
- 功能分支模式是穷人的模块化架构,不是构建在运行时/部署时能够轻松开启和关闭功能的系统( Keystone Interface 、Feature Flags ),而是它们将自己与源码控制耦合,通过手动合并来提供这种机制。
- 我感觉很多人其实根本就没有做到持续集成,他们只是用了持续集成工具。
- 分支并不是越多越好,而且正好相反。
- 集成前 Code Review 在商业项目中并不是必要的,相反它还会引起集成摩擦,降低集成频率。一个配合的很好的团队甚至可以放弃它。