1. 引言
1.1 编写目的
俗话说:没有规矩,不成方圆。遵循一个好的规章制度能让你的工作事半功倍。同时也可以展现出你做事的认真的态度以及你的专业性,不会显得杂乱无章,管理困难。Git分支规范也是一样。当遵循了某种约定的Git分支,在代码提交以及多开发、多分支协同工作的时候,必须遵循这个规范操作,否则不予以提交、合并代码、提测、上线等操作。对于使用Git作为源代码管理工具的项目,如何使用Git工具及标准的工作量进行规范说明。
1.2 预期读者与阅读建议
预期读者 目标
软件开发人员 理解需要遵循的Git使用规范流程,以及常用Git命令的使用。能够熟练应用Git支持软件开发过程中的源代码管理。
测试人员 理解Git使用规范流程,能够基于Git进行软件版本管理、支持自动化集成、及Bug跟踪。
其它人员 了解Git使用流程规范。
2. Git工作流规范
Git 作为一个源码管理系统,不可避免涉及到多人协作。协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去。本文档所描述的工作流规范遵循行称之为Git Flow的流程;最早诞生、并得到广泛采用的一种工作流程。
2.1 分支管理
在此流程中,每个软件项目存在两个长期的分支:
•主分支(master) - 用于对外发布版本,任何时候在这个分支获得的软件都是稳定版本;
•开发分支(dev)- 用于日常开发,存放最新的开发版本。
此外,还存在三个种类的短期分支:
•功能分支(feature) - 开发某项特定功能,从dev分支上面分出来的;开发完成后,再合并到dev分支;
•补丁分支(hotfix) - 修复已发布软件的bug分支,从master上分支出来;开发完成后,再合并到master和dev分支上;
•预发布分支(release) - 发布版本之前从dev分支分出来的一个用于测试的分支;完成测试工作后,再合并到master和dev分支上。
2.2 场景1 – 项目初始化(添加忽略文件)
项目初始化包含:
1.创建并初始化master分支;
2.创建dev分支。
2.3 场景2 – 功能开发
步骤包括:
1.从dev分支上创建feature分支;
2.在feature分支上修改代码(可多次提交)。
3.完成功能开发;
4.将feature分支合并回dev分支(期间在dev分支上可能存在修改);
5.合并成功后,删除feature分支
2.4 场景3 – 测试、缺陷修复与版本发布
步骤包括:
1.从dev分支上创建release分支,提交测试;
2.如有测试缺陷需要修复,从release分支上创建issue分支进行bug修复;
3.缺陷修复完成后,将issue分支合并到release分支;合并完成后删除issue分支;
4.重复步骤2、3完成所有缺陷修复;
5.测试通过后,将release分支合并到master分支,发布稳定软件版本;并打tag记录发布软件版本信息;
6.将release分支合并到dev分支,合并测试中的缺陷修改;
7.成功将release分支合并到master分支和dev分支后,删除release分支。
2.5 场景4 – 发布产品缺陷修复
步骤包括:
1.从master分支上创建hotfix分支;
2.在hotfix分支上完成缺陷修复,并测试通过;
3.将hotfix分支合并到master分支;合并完成后删除issue分支;发布稳定软件版本;并打tag记录发布软件版本信息;
4.将hotfix分支合并到dev分支,合并缺陷修改;
5.成功将hotfix分支合并到master分支和dev分支后,删除hotfix分支。
2.6feature功能分支
1.开发新需求,从master分支创建功能分支,名为feature/xx-xx(需求功能-日期),若功能是多人开发,名为feature/xx-xx-xx01(需求功能-日期-姓名01)
2.开发过程需要提测:请把自己的feature分支合并到dev分支,发布dev分支;
3.开发差不多要完成需要提测,请把自己的feature合并到fat分支,fat环境发布fat分支;
4.用户验收uat环境,请从dev分支拉取最新代码切成fat分支,uat环境发布fat分支;
2.6.1 注意事项
由于通常一个软件项目涉及到多个开发人员同时修改,因此在推送本地git版本库的dev分支内容到远程版本库时可能存在版本冲突。操作顺序应是:
- 1.执行Pull命令,从远程库拉取dev分支内容;
- 2.如存在版本冲突,需要先解决版本冲突,并保证项目不存在编译和运行错误;
- 3.执行Push命令,将本地git版本库dev分支内容推送到远程。
3. 项目权限
Git权限分Maintainer、Developer、Reporter、Guest四种类型
1.Maintainer可以创建项目、添加tag、保护分支、添加项目成员、编辑项目
2.Developer可以克隆代码、开发、提交、push
3.Reporter可以克隆代码,不能提交
4.Guest可以创建issue、发表评论,不能读写版本库
4. 常用Git命令
命令功能 命令行
创建版本库 Git init
添加文件 Git add
提交文件(至本地库) Git commit –m “comments”
查看修改日志 Git log
回退到历史版本 Git reset --hard <commit_id>
清空缓存区(缓存区的修改回退到工作区) Git reset HEAD
撤销修改(没有放入缓存区,则回到版本库状态;放入缓存区,回到缓存区状态) Git checkout –
删除文件 Git rm
添加远程仓库 Git remote add origin
推送本地库内容至远程仓库 Git push –u origin master
从远程库克隆到本地 Git clone
拉取远程仓库内容到本地 Git pull
创建分支 Git branch
切换分支 Git checktout
创建并切换到分支 Git checkout –b
合并分支 Git merge
合并分支(禁用Fast forward模式) Git merge --no-ff –m “comments”
打标签 Git tag
删除标签 Git tag –d
5. 提交日志操作规范
1.feat: 新增 feature
2.fix: 修复 bug
3.docs: 仅仅修改了文档,比如 README, CHANGELOG, CONTRIBUTE等等
4.style: 仅仅修改了空格、格式缩进、逗号等等,不改变代码逻辑
5.refactor: 代码重构,没有加新功能或者修复 bug
6.perf: 优化相关,比如提升性能、体验
7.test: 测试用例,包括单元测试、集成测试等
8.chore: 改变构建流程、或者增加依赖库、工具等
9.revert: 回滚到上一个版本
10.init: 初始化
11.build: 构建项目
12.scope: commit 影响的范围, 比如: route, component, utils, build…
13.subject: commit 的概述
6. 插件 Git Commit Template