Git 开发流程
分支介绍
主分支 master
- 我们把原始库/master库认作为主分支,HEAD 的源代码存在于此版本中;
- master 分支随时都是一个预备生产状态,也就是稳定的、可部署的版本,一般来讲和部署在生产上的代码是相同的;
- 受保护分支,只接受 release 分支的合并
- 常驻分支,对应 jenkins prod 项目,如
war_app_<context>_prod
预发布分支 release
- 预发布分支是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行 sit 测试
- 预发布分支从 master 分支上分出来,并且接受特性分支的合并,从而进行 sit 测试
- sit 测试通过后,合并到 master 分支,并且打上适当的标签(tag)
- 受保护分支,接受 feature 分支的合并
- 常驻分支,对应 jenkins sit 项目,如
war_app_<context>_sit
特性分支 feature
- 特性分支是为了开发某种特定特性,从 master 分支上分出来的分支
- 特性分支开发完成后,先合并到 develop 分支,进入 dev 环境测试该特性
- dev 环境测试通过后,再合并到从 master 拉出 release 分支,进行 sit 测试
- 进入 sit 环境测试后如果代码有新的变更,需要重新合并回 develop 分支
- hotfix 分支是一种特殊的 feature 分支,开发规范与特性分支一致
开发分支 develop
- 开发分支作为集成多个特性的分支,在开发分支上进行 dev 测试
- 开发分支定时合并 master 分支,并随时接受特性分支的合并,合并后进入 dev 环境进行特性的 dev 测试
- 常驻分支,对应 jenkins dev 项目,如
war_app_<context>_dev
开发流程
单特性发布的一个典型流程:
- 开发特性 x 的迭代开始,开发人员从 master 分支 fork 出一个 feature-x 分支
- 其他开发人员在该分支上 fork 自己的特性分支 feature-x-someone,开发完成后合并回 feature-x 分支
- 所有开发人员都开发完成特性 x 而且都合并回 feature-x 后 ,feature-x 合并到 develop 分支进行 dev 测试
- dev 测试通过后,开发人员合并 feature-x 分支到 release 分支进行 sit 测试
- sit 测试通过后,开发人员合并 release 分支到 master 分支进行发布
热修复的一个典型流程:
- 开发人员从 master 分支 fork 出一个 hotfix 分支
- 开发完成后合并 hotfix 分支到 release 分支进行 sit 测试
- sit 测试通过后,开发人员合并 release 分支到 master 分支进行发布
多特性发布的一个典型流程:
- 开发特性 y, z 的迭代开始,开发人员从 master 分支 fork 出 feature-y, feature-z 分支
- feature-y 开发完成后合并到 develop 分支进行 dev 测试
- feature-y dev 测试通过后,合并到 release 分支进行 sit 测试
- 此时,feature-z 开发完成,合并到 develop 分支进行 dev 测试
- feature-z dev 测试通过后,需要合并到 release 分支与特性 y 一起发布,则合并 feature-z 分支到 release 分支进行 sit 测试
- sit 测试不通过,发现特性 y 有 bug,那么 feature-y 继续修复 bug,丢弃该 release 分支,feature-z 等待 feature-y 修复再继续下一次的发布
- feature-y 修复 bug 完成,开发人员重新从 master 分支 fork 出一个 release 分支
- 合并 feature-y 与 feature-z 到 release 分支再次进行 sit 测试
- sit 测试通过后,开发人员合并 release 分支到 master 分支进行发布
其他
.gitignore
所有不需要提交的文件/文件夹都需要在在.gitignore文件中进行申明,主要是 上传文件目录,缓存,日志及临时文件 。
.gitkeep
使用git add命令时不会把空文件夹加入到git中去,所以我们对所有的空文件夹增加一个空的隐藏文件.gitkeep,这个文件不会对开发造成影响,又可以对空文件夹进行跟踪。
规范