Git 版本控制系统使用规范

Posted by 晓康 on August 9, 2021

1 现存问题及优化方案

1.1 分支问题

  • 分支交错,可读性差
  • 每个分支功能不明确,存在冗余的废弃分支

1.2 版本问题

  • 一个 bug 需要在多个版本分支上修复
  • 临时性调整,拆版本导致版本混乱

1.3 提交问题

  • 提交信息可读性可以更好
  • 提交可以更具原子性

1.4 优化方案

  • Git 规范
    • Git 分支管理规范
    • 提交规范
  • 准则
    • 只使用基本的 Git 指令
    • 团队成员需要理解基本的 Git 指令

2 工作区、暂存区、版本库

2.1 概念

  • 工作区: workspace,就是你在电脑上看到的代码目录(.git 隐藏目录版本库除外),或者 以后需要再新建的目录文件等等都属于工作区范畴。
  • 暂存区: repository,工作区有一个隐藏目录 .git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是 Index/Stage (暂存区),还有 Git 为我们自动创建了第一个分支 master,以及指向master的一个指针 HEAD。
  • 版本库: index/stage,已 add 待 commit 的修改。

2.2 工作流程

使用 Git 提交文件到版本库有两步:

第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。
第二步:使用 git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支上。


as_git_add.png


2.3 版本回退指令

2.3.1 reset指令

git reset 指令用于回退版本,可以指定退回某一次提交的版本

  • reset –soft: 仅仅移动当前 Head 指针,不会改变工作区和暂存区的内容
  • reset –mixed: 是 reset 的默认参数,移动 head 指针,改变暂存区内容,但不会改变工作区
  • reset –hard: 当前 head 指针、工作区和暂存区内容全部改变(慎重操作)

其实,soft 用处不是很多,当 commit 之后想撤回 commit,但还不想覆盖工作区内容时,使用 –mixed;当想完全回滚时,使用 –hard 来覆盖工作区。

2.3.2 revert指令

git revert 指令也用于回退版本,可以把某一次提交的版本反向修改,会新增一次提交记录,保留所有提交记录。

注意:dev、master 分支不使用 reset 尽量使用 revert ,个人本地分支可以使用 reset。(因版本回退时可保留原始记录)

3 分支管理

常设分支有 master 分支、dev 分支。临时分支有 release 分支、feature 分支和bugfix 分支。

  • master: 主分支(永远处在发布就绪状态)
  • dev: 开发人员日常开发所用分支(新功能开发)
  • release: 预发布版本(版本正式布后,创建版本 tag,merge 回 master 和 dev)
  • feature: 开发某个特定功能,从 dev 分支分出来,开发完成合并回 dev 分支
  • bugfix: 项目正式发布后出现 bug,进行 bug 修复,从 master 分支分出来,修补结束后合并进 master 分支

as_git_branch.png


注意事项

  • 命名:feature/x: x 为功能说明,示例:feature/createGroup;bugfix/x: x 为 bug 说明,示例:bugfix/chooseFile
  • tag:正式发布版本需要创建 tag,格式遵循软件产品版本名规范
  • push:主要分支在进行push 指令时,要确保本地代码可正常运行,不影响团队成员的正常开发

4 提交规范

commit 格式如下,:(冒号)之前的格式必须严格符合规范,不允许添加额外内容,包括空格:

1
<type>(<scope>): <description>

各部分说明:

  • type: 类型,提交的类别
    • feature: 新功能, 版本更新等
    • fix: 修复 bug
    • refactor: 代码重构 (新功能, 版本更新, bugfix, 测试 之外的代码改动)
    • test: 添加,修改测试代码
    • docs: 文档变动
  • scope: 修改范围,主要是这次修改涉及到的部分。scope 名称以下面的『scope 名称规范』为准,规范中不存在的模块需要及时更新到单词表中。scope 名称只允许 [A-Za-z_]
  • description: 修改描述,具体的修改描述信息

示例

1
2
3
4
feature(group): 群组详情页修改样式
fix(login): 登录页面错误处理
refactor(contact): 优化好友列表页加载性能
docs(git): 补充 git commit 规范

4.1 scope 名称规范

scope 分为业务架构两种。业务类如登录模块,联系人模块;架构类如网络模块,数据库模块。

优先使用业务类 scope,举例如下。

eg.1 如提交一次联系人模块数据操作性能优化,commit-msg 应该为:

1
refactor(contact): 优化联系人模块数据库操作性能

eg.2 提交一次数据库底层的 insert 逻辑修复,commit-msg 应该为:

1
fix(database): 修复 insert 逻辑错误

业务类 scope 名称规范

模块 scope 名称
登录 login
欢迎页(引导页) welcome
主界面 main
聊天 chat
联系人 contact
群组 group

架构类 scope 名称规范

模块 scope 名称
数据库模块 db
sp 存储 sp
网络请求模块 net
eventbus eventbus
资源文件 resource

5 继续学习


知识图谱

git_charts.jpg


转载注明原始出处 Git 版本控制系统使用规范 © 芯盾技术团队