为什么要用分支
记得刚加入现在团队的时候,和boss搭了GOGS(类似的还有gitlab),到最近完成v0.1版本,一直都是用一个分支了。最近团队加入了几个新成员,产品那边也有大量的新需求和迭代。若还不进行分支管理,必定一定会陷入混乱(如果你问为什么?看了后面的分支管理模型,你就会恍然大悟)。
这也让我想起在第一家公司实习的时候,有一个team,用了git,后来发现,只是用来更新和提交,真是高射炮打蚊子。就算是后来人员扩充了之后,仍然没有分支管理,当时觉得不可思议。他们的产品迭代速度很慢,质量也很差,我觉得这跟他们的代码管理也有一点关系。
一个通用模型
关于分支的管理和工程实践上,最广为认知的是Vincent Driessen在2010年发表的一篇博客:《一种成功的Git分支管理模型》,这篇博客总结了一种通用的分支管理模型,这个模型可以覆盖大部分的场景和研发流程。或许你没看过这篇博客,但如果你参与过团队分支管理策略的制定,你一定可以找到共鸣。
博客中有一张图很清晰地描述了这个模型和各种场景:
我记得在第一次实习时,团队中用的是svn,那时还没看过这篇博客,不过那时我们根据研发流程和需求场景制定出来的svn分支管理策略和这个类似,只是一个简化版,没有做太细。有一部分原因是因为svn的分支功能确实sucks,团队也不想浪费太多精力和成本。据说现在他们也换为git了,因为并行开发的功能太多了,svn终于让他们“心力交瘁”。
git-flow
git的分支管理非常强大和方便,而git-flow可以让我们简化分支管理的操作。git-flow是git的一个扩展集,按Vincent Driessen
的分支模型提供高层的操作,具体可参考这篇指南。
(现在想起当年用svn的分支管理,仍隐隐觉得蛋疼。那一堆堆tree-conflict(尤其是目录)历历在目,还好后来转到git)
其他
- 修改配置
git flow config
或者,修改配置文件:
vim your_repo/.git/config
总结
分支管理是一门管理艺术,一味地盲目模仿不切实际,只会增加混乱和成本,在执行上也会遇到各种阻碍,所以针对自身团队和业务特点,找到最适合自己的管理策略。不过若你的产品需要快速的更新和迭代,你一定要试一下git。