Git Flow
Git Flow 是构建在 Git 之上的一个组织软件开发活动的模型,是在 Git 之上构建的一项软件开发最佳实践。Git Flow 是一套使用 Git 进行源代码管理时的一套行为规范和简化部分 Git 操作的工具。
Git Flow Nightly
是 Eclipse 中的插件,可以通过界面操作实现 Git Flow
中的功能。
Git Flow Nightly 安装
- 方法 1:通过 Eclipse marketplace 安装:
https://marketplace.eclipse.org/content/gitflow-nightly
方法 2:通过 Eclipse 更新地址安装(== 推荐 ==):
http://download.eclipse.org/egit/updates-stable-nightly/
Git Flow Nightly 使用
初始化 GitFlow
从 Git 仓库导出项目到 Eclipse
初始化 GitFlow
新功能流程
开始新功能分支
输入新功能名称,可以为任意名称
在新功能分支中完成编码工作
提交修改
注意只 commit 到本地仓库,不要 push;
结束新功能分支
选择分支结束后处理方式
- Squash,将分支中的 commit 合并为一次提交
Keep branch,保留分支,不删除
建议不要勾选,使用默认的配置就可以了。
查看结果
新功能分支中的内容被合并到本地 develop 分支了;
新功能分支被删除了;合并并 push 本地 develop 分支
- 执行 pull,拉取远程 develop 到本地,会自动与本地 develop 合并;
- 合并存在冲突时,需要手动处理;
处理完成后 push 到远程 develop 分支上。
结束
可以看到远程 develop 分支和本地 develop 分支内容已经一致。
版本发布流程
开始新版本分支
注意只有在 develop 分支已经通过所有测试后才考虑创建 release 分支,它原则上只做版本说明等编写。
Release 分支的命名要与 Maven 版本号一致,因为在结束发布分支时,它还作为标签的命名。
修改系统版本
系统版本命名规范可参考 豆瓣版本命名规范
注意发布的版本中不允许依赖 *-SNAPSHOT 的 JAR 包,否则该 JAR 包重新发布后会导致,标签中的代码依赖错误。修改变更历史
文件为项目根目录下:CHANGELOG
编码为 UTF-8
格式参考 Wicket CHANGELOG
变更历史建议在每做一个新功能时添加,再对比下git commit
日志,补充完整。提交修改
注意为
commit
,不要push
结束发布分支
可以看到:
release 分支被合并到了本地 develop 和 master 分支;
release 分支被删除了;
从本地 master 分支创建了新的标签 (Tag),标签名为 release 分支的名称;Push 本地分支
Push 本地 develop 分支
Push 本地 master 分支
如果无权限修改 master 分支,通知项目管理员就可以了。Push 标签 1.0.0
查看结果
访问 Git 仓库查看结果
标签变更历史
紧急修复流程
当生产环境中的软件遇到了异常情况或者发现了严重到必须立即修复的软件缺陷的时候,就需要从 master 分支上指定的 TAG 版本派生 hotfix 分支来组织代码的紧急修复工作。
注意:hotfix 只从 TAG 发出,而且结束后会生成新的 TAG。
开始 hotfix 分支
Hotfix 的命名与 release 类似,对于 X.X.X,第三位为修复版本号,使用自增方式就可以了。
修复 BUG
修改版本和变更历史
结束 hotfix
可以看到:
Hotfix 分支被合并到了 develop 和 master
Hotfix 分支被删除了
从 master 分支创建了 Tag,名称为 hotfix 名称Push 本地分支
- 略 *
项目发布流程
项目发布约束
- 必须从 TAG 进行发布
- TAG 对应的版本都是非 SNAPSHOT 的
- TAG 依赖的项目也都是非 SNAPSHOT 的
- 每个 TAG 都必须在公司 maven 仓库中存在对应的 POM 文件或 jar 包和源码
- 最好使用专门的打包机进行项目打包,以避免本地项目没有发布的情况
普通 jar 包发布
- 将对应的 Tag 版本导出到本地
- 执行 Maven 发布命令:mvn clean deploy
- 结束
产品 ZIP 包发布
- 将对应的 Tag 版本导出到本地
- 执行 Maven 发布命令:mvn clean deploy
- 执行 Maven 打包命令:mvn clean package
- 获取打包结果
- 编写产品说明文档
- 提交到配置管理员