1.Summary

2.Branches

  • 主干分支:永远存在,互相平行。
  • master:产品发布分支,从develop分支合并过来。合并develop分支需要在git服务器上提交merge request。
  • develop:所有协作者要交付的最新的代码
  • 辅助分支:用来团队协作、特性跟踪、版本发布,最终将被删除的分支。所有分支最终合并到develop。为了便于管理,当前需要push到远程服务器,合并到develop之后进行删除。  feature:具体的功能点分支,每一个功能点从develop分支拉取一个feature分支,完成之后合并到develop分支。新分支命名规则:前缀“feature-”,后面部分任意。 release:预发布分支,每周版本发布特性基本ready的情况下,从develop分支拉取release分支,在这个分支上进行测试、修复bug,最后合并到develop分支。新分支命名规则:前缀“r”+版本号,比如 r2.6.2。 hotfix:在线的production产品出现bug的时候,临时修复bug。从master分支拉取hotfix分支,最终同时合并到master和develop两个分支上。  

3.Operations

3.1开发新的feature

  • Step1:从develop分支创建新的feature分支
$ git checkout -b feature-new_video_player develop
  • Step2:在新的feature分支上完成相关功能的开发(可能会有若干个commit提交)
...... (some changes)
$ git add -A .
$ git commit -m "commit msg"
  • Step3:如果不能在一天内完成,需要将feature分支push到远程服务器;如果当前就能完成,则跳过这一步,直接进入下一步。
$ git push origin feature-new_video_player
  • Step4:将feature分支合并到develop分支并push
$ git checkout develop
$ git pull --rebase
$ git merge --no-ff feature-new_video_player
$ git push origin develop
  • Step5:删除本地feature分支,以及远程feature分支(如果有)
$ git branch -d feature-new_video_player
$ git push origin :feature-new_video_player

3.2 发布新版本2.6.3

  • Step1:从develop分支建立release分支
$ git checkout -b r2.6.3 develop
  • Step2:在release分支r2.6.3上进行测试、修复bug ...... (fix bugs and test)
  • Step3:将代码push到远程git服务器上
$ git push origin r2.6.3
  • Step4:测试完成,发布正式版本,合并新版本到develop分支上
$ git checkout develop
$ git pull --rebase
$ git merge --no-ff r2.6.3
  • Step5:在git服务器上发起merge request,请求将r2.6.3分支合并到master分支上
  • Step6:MR通过后,owner同时建立新的tag(命名为前缀"v"+版本号,比如 "v2.6.3" ),进行部署

3.3 及时修复production环境的bug

  • Step1:从master分支建立hotfix分支,命名为“hotfix-”前缀+版本号,如果线上版本是v2.6.3,hotfix版本就是2.6.4
$ git checkout -b hotfix-2.6.4 master
  • Step2:修复bug ......(fix bugs)
  • Step3:将修复merge到develop
$ git checkout develop
$ git pull --rebase
$ git merge --no-ff hotfix-2.6.4
$ git push origin develop
  • Step4:在git服务器上提交merge request,请求将修复merge到master
  • Step5:MR通过后,同时建立新的版本tag,进行部署

Tips

如果觉得命令复杂,可以使用 git-flow工具。

Reference