Git 是目前最流行的源代码管理工具,Git分支管理可以很灵活,但目前主流的分支官方方式主要有3种,本文对几种主流的 Git 分支管理实践进行了介绍,可以帮助开发团队选择自己最合适的方案。
1,单主干
单主干的分支实践(Trunk-based development,TBD)在 SVN 中比较流行。Google 和 Facebook 都使用这种方式。trunk 是 SVN 中主干分支的名称,对应到 Git 中则是 master 分支。TBD 的特点是所有团队成员都在单个主干分支上进行开发。当需要发布时,先考虑使用标签(tag),即 tag 某个 commit 来作为发布的版本。如果仅靠 tag 不能满足要求,则从主干分支创建发布分支。bug 修复在主干分支中进行,再 cherry-pick 到发布分支。
TBD 中的分支流程的示意图2,Github flow
GitHub flow 是 GitHub 所使用的一种简单的流程。该流程只使用两类分支,并依托于 GitHub 的 pull request 功能。在 GitHub flow 中,master 分支中包含稳定的代码。该分支已经或即将被部署到生产环境。master 分支的作用是提供一个稳定可靠的代码基础。任何开发人员都不允许把未测试或未审查的代码直接提交到 master 分支。
对代码的任何修改,包括 bug 修复、hotfix、新功能开发等都在单独的分支中进行。不管是一行代码的小改动,还是需要几个星期开发的新功能,都采用同样的方式来管理。当需要进行修改时,从 master 分支创建一个新的分支。新分支的名称应该简单清晰地描述该分支的作用。所有相关的代码修改都在新分支中进行。开发人员可以自由地提交代码和 push 到远程仓库。
当新分支中的代码全部完成之后,通过 GitHub 提交一个新的 pull request。团队中的其他人员会对代码进行审查,提出相关的修改意见。由持续集成服务器(如 Jenkins)对新分支进行自动化测试。当代码通过自动化测试和代码审查之后,该分支的代码被合并到 master 分支。再从 master 分支部署到生产环境
Github flow 中的分支流程的示意图3, Git Flow
3.1,Git Flow简介
Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践。Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化部分Git操作的工具。
2010年5月,在一篇名为《一种成功的Git分支模型的博文中》,@nvie介绍了一种在Git之上的软件开发模型。通过利用Git创建和管理分支的能力,为每个分支设定具有特定的含义名称,并将软件生命周期中的各类活动归并到不同的分支上。实现了软件开发过程不同操作的相互隔离。这种软件开发的活动模型被nwie称为“Git Flow”。
一般而言,软件开发模型有常见的瀑布模型、迭代开发模型、以及最近出现的敏捷开发模型等不同的模型。每种模型有各自应用场景。Git Flow重点解决的是由于源代码在开发过程中的各种冲突导致开发活动混乱的问题。因此,Git Flow可以很好的于各种现有开发模型相结合使用。
在开始研究Git Flow的具体内容前,下面这张图可以看到模型的全貌:
git-flow 中的分支流程的示意图3.2,Git Flow 流程
Git Flow 流程中包含 5 类分支,分别是 master、develop、新功能分支(feature)、发布分支(release)和 hotfix。这些分支的作用和生命周期各不相同。
- master 分支中包含的是可以部署到生产环境中的代码,这一点和 GitHub flow 是相同的。
- develop 分支中包含的是下个版本需要发布的内容。从某种意义上来说,develop 是一个进行代码集成的分支。
- 从 develop 分支创建一个新的 feature 分支,如 feature/my-awesome-feature。
- 在该 feature 分支上进行开发,提交代码,push 到远端仓库。
- 当代码完成之后,合并到 develop 分支并删除当前 feature 分支。
- 当 develop 分支集成了足够的新功能和 bug 修复代码之后,从 develop 分支创建一个新的 release 分支,如 release/1.4。
- 把 release 分支部署到持续集成服务器上进行测试。测试包括自动化集成测试和手动的用户接受测试。对于测试中发现的问题,直接在 release 分支上提交修改。完成修改之后再次部署和测试。
- 当 release 分支中的代码通过测试之后,把 release 分支合并到 develop 和 master 分支,并在 master 分支上添加相应的 tag。
3.3,Git Flow工具
Git Flow命令行工具可以使用脚本快速创建、合并各类分支。
sourcetree也内置支持Git Flow。
SourceTree中Git Flow入口Git Flow更详细介绍:企业级开发:Gitflow Workflow工作流
网友评论