Li Zheng flyskywhy@gmail.com
《不拉马的士兵》与 git 仓库管理方式
经典的企业管理故事《不拉马的士兵》是这么讲的:一位新调任的法国炮兵团长每次视察炮兵演习的时候,总发现有一名士兵一动不动、自始至终地站在大炮旁边,团长以前不是炮兵,就问旁边的军官,军官也回答不出来为什么,只是说一直就是这样,而教科书上历来都是这么规定的。团长对此颇为怀疑,经过查找资料了解了真相:从前,大炮都是用马车牵引的,需要一名士兵专门站在大炮边拉马,使因发射后坐力而移动的大炮复位。现在,大炮完全改成了机械化操作,教科书却没有做出相应的修改,结果就出现了一直都有一名士兵站在大炮边的滑稽现象。最后团长上书法国国防部,修改了这一错误。
类似的,互联网软件开发历史上一直流传着“前后端分离”的通用做法。而在我们一个项目应项目经理的要求将项目 git 仓库分离成前端、后端两个 git 仓库的一年后,我还是一直没发现分离带来的好处,经过网上搜索发现历史上出现前后端分离的背景是:前后端编码语言分别为 Java 和 JS ,前端人员有时等不及后端人员更新代码,又不愿花时间折腾不熟悉的 Java 语言,于是就自己写一个 NodeJS 服务来进行调试,此所谓“前后端开发分离”。现在,由于 NodeJS 最近几年的巨大进步,我们项目后端直接就用它代替 Java 了,前后端都是 JS 语言编写,再考虑到前后端合并后带来的项目成员全栈能力磨炼机会的增多,所以我认为:
- 项目前后端 git 仓库合并比分离更合适;
- 同时将原项目后端的
master
develop
testing/release
3 条分支减少为master
和testing/release
2 条分支,否则合并后,前端人员经常要重复在 3 条分支上做 git 的cherry-pick
操作及解决可能的合并冲突从而降低士气。因为在阿里,我们如何管理代码分支?这篇文章中也提到了“但其中的一些操作(比如为每个发布分支选出恰当的特性分支组合进行合并)手工执行极易出错,而且让团队的个人重复这些日常琐事的命令操作,并不是令人愉悦的事情。” - 在一些小项目中前后端使用同一个 git 仓库且只有一个 master 分支,这样开发效率和人员士气都会很高。
附:可以浓缩一个通用前后端比如 ReactWebNative8Koa.git 仓库,然后只需 2 步操作即可快速创建新项目开箱即用的代码结构:
npx react-native-rename-next YourNewProj -b com.yourcompany.yournewproj 搜索替换所有文件中的 ReactWebNative8Koa 为 YourNewProj