目的

  • 统一团队的Git工作流,包括分支使用、tag规范、issue等
  • 统一团队的Git Commit日志标准,便于后续代码review,版本发布以及日志自动化生成

git工作流

  • git flow工作流:

    • master为主分支,属保护分支,不能直接在此进行代码修改和提交。
    • develop为日常使用分支。
    • feature新功能分支,当完成一个功能并测试通过后进行合并到develop分支中。
    • hotfix线上紧急漏洞修复分支,从master分支拉取创建,修复完bug后合并到master和develop分支中。
  • gitlab flow工作流(最大原则叫做"上游优先"(upsteam first),即只存在一个主分支master,它是所有其他分支的"上游"。只有上游分支采纳的代码变化,才能应用到其他分支):

master->pre-production->production

  • master开发环境分支
  • pre-production预发环境分支
  • production生产环境分支

git commit规范

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
复制代码
占位标签解析:
type:代表某次提交的类型,比如是修复一个bug还是增加一个新的feature。所有的type类型如下:
scope:scope说明commit影响的范围。scope依据项目而定,例如在业务项目中可以依据菜单或者功能模块划分,如果是组件库开发,则可以依据组件划分。
subject:是commit的简短描述
body:提交代码的详细描述
footer:如果代码的提交是不兼容变更或关闭缺陷,则Footer必需,否则可以省略。feat[特性]:新增feature
fix[修复]: 修复bug
docs[文档]: 仅仅修改了文档,比如README, CHANGELOG, CONTRIBUTE等等
style[格式]: 仅仅修改了空格、格式缩进、都好等等,不改变代码逻辑
refactor[重构]: 代码重构,没有加新功能或者修复bug
perf[优化]: 优化相关,比如提升性能、体验
test[测试]: 测试用例,包括单元测试、集成测试等
chore[工具]: 改变构建流程、或者增加依赖库、工具等
revert[回滚]: 回滚到上一个版本
复制代码

示例:

特性:添加头像功能
特性:添加收藏功能
修复:在android机器上传崩溃问题解决
文档:修改README,增加了使用说明
优化:首页图片加载缓慢优化
重构:对头像功能进行封装重构
复制代码

Git标签打包规范

**Tag版本号:**Tag包括3位版本,前缀使用v。比如v1.2.31。
Tag命名规范:
1.新功能开发使用第2位版本号,bug修复使用第3位版本号
2.首版本号是全新的功能类,功能模块上线才做的调整

**标题格式:项目名-日期
内容格式:<分类>---<内容>
<分类>:**新功能、bug修复、优化、依赖升级、重构、漏洞&补丁

示例:

此图片引用自:我们的GIT工作流

Git Commit格式校验

  • 准备commitlint/cli用于格式校验
  • 准备husky用于git提交代码时触发校验
  1. 全局安装commitlint/cli
npm install -g @commitlint/cli @commitlint/config-conventional
复制代码

2.在项目根目录创建配置文件commitlint.config.js,可以使用以下命令创建

echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
复制代码

3.在配置文件中定义提交规范,可使用以下配置:

"module.exports = {extends: ['@commitlint/config-conventional']}"module.exports = {extends: ['@commitlint/config-conventional'],rules: {'type-enum': [2, 'always', ["feat", "fix", "docs", "style", "refactor", "test", "chore", "revert"]],'subject-full-stop': [0, 'never'],'subject-case': [0, 'never']}
};
复制代码

4.项目添加husky,进行git提交触发校验,安装如下:

npm install husky --save-dev
复制代码

5.安装完成后在package.json中配置如下信息

"scripts": {"commitmsg": "commitlint -e $GIT_PARAMS",},"config": {"commitizen": {"path": "cz-customizable"}},
复制代码

6.经过以上步骤,git commit的规范校验已经完成。可以进行代码提交了。

不规范提交>git commit -m "添加新功能"
提示:
⧗   input: 添加新功能
✖   subject may not be empty [subject-empty]
✖   type may not be empty [type-empty]规范提交>git commit -m "feat: 添加新功能"
复制代码

汉化与自定义校验规则

1.当前项目安装commitlint-config-cz,如下

npm install commitlint-config-cz --save-dev
复制代码

2.commitlint校验规则配置添加如下设置:

module.exports = {extends: ['cz']
};
复制代码

3.下载官方配置文件进行修改。官方配置文件cz-config-EXAMPLE.js。修改示例如下:

'use strict';module.exports = {types: [{value: '特性',name: '特性:    一个新的特性'},{value: '修复',name: '修复:    修复一个Bug'},{value: '文档',name: '文档:    变更的只有文档'},{value: '格式',name: '格式:    空格, 分号等格式修复'},{value: '重构',name: '重构:    代码重构,注意和特性、修复区分开'},{value: '性能',name: '性能:    提升性能'},{value: '测试',name: '测试:    添加一个测试'},{value: '工具',name: '工具:    开发工具变动(构建、脚手架工具等)'},{value: '回滚',name: '回滚:    代码回退'}],scopes: [{name: '用户模块'},{name: '订单模块'},{name: '社区模块'},{name: '商品模块'}],// it needs to match the value for field type. Eg.: 'fix'/*scopeOverrides: {fix: [{name: 'merge'},{name: 'style'},{name: 'e2eTest'},{name: 'unitTest'}]},*/// override the messages, defaults are as followsmessages: {type: '选择一种你的提交类型:',scope: '选择一个scope (可选):',// used if allowCustomScopes is truecustomScope: 'Denote the SCOPE of this change:',subject: '简要说明:\n',body: '详细说明,使用"|"换行(可选):\n',breaking: '非兼容性说明 (可选):\n',footer: '关联关闭的issue,例如:#31, #34(可选):\n',confirmCommit: '确定提交?'},allowCustomScopes: true,allowBreakingChanges: ['特性', '修复'],// limit subject lengthsubjectLimit: 100};
复制代码

生成changelog

1.安装conventional-changelog,可以快速生成提交日志

npm install -g conventional-changelog-cli
npm install -g cz-conventional-changelog
复制代码

2.项目根目录下添加 .czrc 配置文件,文件内容如下

{ "path": "cz-conventional-changelog" }
复制代码

3.在package.json中的scripts项增加如下指令

"version": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md"
复制代码

4.执行npm run version即可在当前目录生成changelog日志了。

参考:
我们的GIT工作流 
Cz工具集使用介绍 - 规范Git提交说明
git工作流程

转载于:https://juejin.im/post/5d05ef596fb9a07ef63fdbe7

git 工作流和git commit规范相关推荐

  1. Git的使用——Git 常用命令总结、Git的使用、Git 的分支、远程仓库的使用、IDEA 中使用Git、Git 工作流(Git Flow、Github Flow、GitLab Flow)

    Git的使用--Git 常用命令总结.Git的使用.Git 的分支.远程仓库的使用.IDEA 中使用Git 一.Git 常用命令总结 为了方便后续查找命令,故先把总结放前面,教程放后面 1.git 基 ...

  2. git上传分支的原理_几张图让你彻底弄懂git工作流(二) ——git分支

    上篇文章已经说了Git简史以及Git基础,那么这篇文章简单总结下Git分支 Git分支 为了理解 Git 分支的实现方式,我们需要回顾一下, Git保存的不是文件差异或者变化量,而只是一系列文件快照. ...

  3. git只提交一张图片_几张图让你彻底弄懂git工作流(三) ——git深入

    Git深入 在 Git 中提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存内容快照的指针,包含本次提交的作者等相关附属信息,包含零个或多个指向该提交对象的父对象指针:首次提交是没有直 ...

  4. Git 工作流的一些经验分享

    Git 工作流的一些经验分享 笔者使用git有一段时间了,踩过不少坑,这里分享下我在git工作流方面的一些经验. 什么是Git工作流? Git工作流你可以理解为工作中团队成员遵守的一种代码管理方案,在 ...

  5. Gitflow(git工作流)

    Gitflow(git工作流) 我第一次接触这个概念,是出于一个偶然的机会,用的Git客户端SourceTree ,在右上角有个按钮"git工作流",出于好奇点开看了下,弹出对话框 ...

  6. 前端规范之Git工作流规范 Husky + lint-staged

    前言 前面的两篇文章已经介绍了如何使用Eslint 和 Stylelint 来规范代码格式.但是有些开发人员会忽视这些错误和警告,直接将代码提交到代码仓库.这就会导致其他其他开发人员pull代码时可能 ...

  7. git push被拒绝_规范git项目提交并自动生成项目commit log

    commit message 是开发的日常操作, 好的 log 不仅有助于他人 review, 还可以有效的输出 CHANGELOG, 对项目的管理实际至关重要, 但是在平时工作时,只依赖大致的开发规 ...

  8. git commit 规范校验配置和版本发布配置

    一. 快速配置和版本发布流程 该章节主要是对下文内容的归纳方便往后的查阅,如果需要了解细节部分请从第二章节开始阅读 1.1 依赖包安装 # husky 包安装 npm install husky -- ...

  9. Git ~ commit 规范

    commit 规范 保持每日下班前提交代码 commit 颗粒度细化, 某一个bug或者某一个功能点 作为一次单独的commit commit 格式 <type> <id> & ...

最新文章

  1. 补充前几天测试用到的Linux命令
  2. 使用conda报错:from conda.cli import main ModuleNotFoundError: No module named conda
  3. Python的random
  4. 【Cocos2d-x】源代码分析之 2d/ui/Widget
  5. 跟踪 linux 内核调用_Linux用户和内核空间中的动态跟踪
  6. .net p/invoke 异常处理
  7. Mysql存储过程老是报错_mysql中看看这个存储过程老是报错,该如何处理
  8. micropython入门教程-如何学习MicroPython MicroPython入门知识
  9. C语言模拟信号量解决同步、互斥问题
  10. 卫星电视的双本振,单本振及高频头相关知识普及
  11. JavaScript正则表达式大全
  12. 嵌入式 h.264中帧与场
  13. Golang的基础数据类型
  14. ESP8266-连接阿里云示例
  15. curiosity_mars_rover调试
  16. 钱符号怎么打出来(如何在文档中输入人民币符号?)
  17. android 图片裁剪库,(译)uCrop介绍 —— 我们自己的Android图片裁剪库
  18. 实现在GEF中被选中图形上的右键菜单
  19. Apache服务器访问过慢分析及解决
  20. python 计算股票保本卖出价格

热门文章

  1. php mysql 插入多条数据_雷林鹏分享:PHP MySQL 插入多条数据
  2. ue4怎么导出fbx文件_【教程】Houdini Engine在UE4中的基本使用(一)
  3. 程序如何调堆内存_Java的内存泄漏
  4. linux挂载文件夹查看命令,findmnt命令查找已挂载的文件系统
  5. ffplay flv mp4 转_FFmpeg将mp4转成flv
  6. win7虚拟磁盘服务器,Win7系统如何删除虚拟磁盘 win7系统删除虚拟磁盘的方法
  7. php 6.0新特性,新版特性 | 序言 | Laravel 6 中文文档
  8. python numpy官网_Python Numpy 教程(上)
  9. linux java查看进程命令_linux一些查看进程情况的命令
  10. aws 部署python lambda_python - 如何使用Aws Lambda(python)接收文件 - 堆栈内存溢出