如何优雅的管理你的commit?

如何优雅的管理你的commit

咱们有的时候去接盘别人的代码或者是团队协做的时候,有时候会根据同伴或者前者的commit来分析当次代码所产生的side effect。咱们指望的是分明的、一眼能够抓住重点的commit信息,可是咱们却常常会看到testfix bugs....等等这样的信息。emmmmmm~~ 有的时候会无从下手,须要仔细看看这些代码究竟进行了一些什么样的改动。然而这种时候每每会因为后者不知道前者代码的结构而致使以前解决的bug或者实现的feature被后者覆盖或者是再现。
固然,上面的这些状况是咱们不但愿出现的。为了不这些状况,咱们须要分明的、清晰的、有结构的、语义化的、约定式的commit方式。
如今比较流行的是:jquery

  • commitizen: Angluar团队的提交代码方式,后来被你们普遍的应用。
  • git template: 自定义git模版,这样的须要团队来制定一套你们都承认的提交模版,而后你们按照这套模版来进行提交。

commitizen

介绍

We have very precise rules over how our git commit messages can be formatted. This leads to more readable messages that are easy to follow when looking through the project history. But also, we use the git commit messages to generate the AngularJS change log.webpack

上面的用渣渣翻译器翻译为:git

对于如何格式化git提交消息,咱们有很是精确的规则。这将致使在查看项目历史时更易于遵循的可读消息。此外,咱们使用git提交消息来生成AngularJS更改日志。web

安装

# 全局安装commitizen
npm install -g commitizen
# 全局安装模版
npm install -g cz-conventional-changelog 
# for macos
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
# for anySysterm 手动建立.czrc,添加如下内容
{ "path": "cz-conventional-changelog" }
# 转到你的project下
cd your project
# 项目内安装
commitizen init cz-conventional-changelog --save --save-exact
# 运行以上命令以后会在package.json中生成下面内容
"config": {
  "commitizen": {
    "path": "cz-conventional-changelog"
  }
}
复制代码

这里,就简单的配置了commitizen在咱们的环境中了。咱们只须要在每次执行git commit的时候替换为git cz便可,就会看到一下内容:
express

commond line

提交类型

  • feat: 新功能
  • fix: 修复bug
  • doc: 文档改变
  • style: 代码格式变动
  • refactor: 某个已有功能重构
  • perf: 性能优化
  • test: 增长测试
  • build: 改变build工具,好比webpack变成grunt
  • revert: 撤销上一次commit
  • ci: 更改ci configuration
  • chore: 一些不更改src或者test相关文件的提交

scope

说明这次修改的影响范围,能够根据本身的状况来进行填写, 官方给出了几个:macos

  • all: 表示影响很大,如修改了总体依赖
  • location: 表示影响小,修改了某个小的功能
  • module: 表示会影响整个模块,如登陆模块等

subject

用来简要描述本次变更,概述便可
npm

susbcribtion

body

具体的描述这次提交的修改内容,应尽可能详细json

footer

放置备注等。若为bug,可关联bug id性能优化

最终样子:
bash

finally


这就是一次简单的提交。固然commitizen还不止如此,它还能够根据咱们每次的commitizen来根据对应的版原本生成对应版本的changelog

changelog

# command
conventional-changelog -p angular -i CHANGELOG.md -s -r 0
复制代码
  • -i: 表示从CHANGELOG.MD中读取changelog
  • -s: 读写changelog为同一个文件
  • -r: 表示生成changelogrelease版本数量,默认为1,所有则是0 因为个人示例的commit个数不够多,这里选取angular的一部分changelog来展现。
    changelog

    固然,若是你还想要尝试其余风格的commit的style,能够下载conventional-changelog-cli来更换不同的风格,它包含了: atom, codemirror, ember, eslint, express, jquery等。只须要将上述的命令中的angular替换为你想要风格的名字便可。
    咱们能够方便的在咱们的npm项目中的package.json中的script中增长这样一条命令方便生成changelog:
{
  "script": {
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.MD"
  }
}
复制代码

以上就是对commitizen的一个简单的介绍,上面的命令你也能够配置在githooks里用来对git个性化的定制。下面推荐几个另外的插件:

  • standard-version: Automate versioning and CHANGELOG generation, with semver.org and conventionalcommits.org
  • vscode-changelog-generator: vscode extension to generate changelog
  • commitlint: Lint commit messages(这个简单的说两句,自定义的话,可是又不想写模版,还想用commit的话,能够用这个来限制为commitizen格式的。下面放一个官方的图)
    commitlint

你也能够关注个人公众号

相关文章
相关标签/搜索