Hibop / Hibop.github.io

Hibop 个人博客
https://hibop.github.io/
23 stars 1 forks source link

关于前端代码风格统一:GIT(commit/ changelog/ lint) #53

Open Hibop opened 5 years ago

Hibop commented 5 years ago

commit message 是开发的日常操作, 写好 log 不仅有助于他人 review, 还可以有效的输出 CHANGELOG, 对项目的管理实际至关重要, 但是实际工作中却常常被大家忽略.

本文主要梳理:
- git工作流
- git commit msg
- git changelog
- git lint / hook

常用工具:

git 工作流

Pull Request VS Merge Reuqest

  1. Pull Request 要解决的问题是防止远程分支过多造成混乱,这样由每个开发人员建立自己的一个版本库,在自己的版本库建分支操作,然后往产品生产版本库发起一个 Pull 请求,同时,又要不断的跟远程的产品版本库同步保持一致, 对于开源项目来说,组织松散,Pull Request 是个非常好的方式

  2. 有 master-dev 分支,比较大的功能才会新开 branch,小功能都是直接到 dev 上的,再加上团队在一起开发所以固定时间看昨日的代码,效果还不错。我们同样没有 QA,自己做的 ticket 也会找对方来做测试,但多是功能的完整性上的测试了。

  3. 每个开发人员一个 git 分支,基本上工作不会互相打扰。我们的分支策略是,对于新功能,从主干开一个功能分支,然后每个开发在功能分支上开个人分支。合并时,先 BI(Backward Integration),,再 FI(Forward Integration)。每周四定期合并,合并时 review。之所以放在周四,是因为如果合并出错,周五还有时间修复。

Merge VS Rebase image

Commit Message 格式

比较推荐是 Angular 团队的规范 【1】【2】

msg格式:

<type>(<scope>): <subject>     // 标题行: 必填, 描述主要修改类型和内容
空行                         
<body>        // 主题内容: 描述为什么修改, 做了什么样的修改, 以及开发的思路等等
空行 
<footer>       // 页脚注释: 放 Breaking Changes 或 Closed Issues

type: commit 的类型

Revert: 有一种特殊情况,如果当前 commit 用于撤销以前的 commit,则必须以revert:开头,后面跟着被撤销 Commit 的 Header。

一个符合规范的 commit message就是一篇简短的论文,告诉别人你干了什么。

git commit 模板

  1. 手动模板 修改 ~/.gitconfig, 添加
    [commit]
    template = ~/.gitmessage

    新建 ~/.gitmessage 内容可以如下:

    # head: <type>(<scope>): <subject>
    # - type: feat, fix, docs, style, refactor, test, chore
    # - scope: can be empty (eg. if the change is a global or difficult to assign to a single component)
    # - subject: start with verb (such as 'change'), 50-character line
    #
    # body: 72-character wrapped. This should answer:
    # * Why was this change necessary?
    # * How does it address the problem?
    # * Are there any side effects?
    #
    # footer: 
    # - Include a link to the ticket, if any.
    # - BREAKING CHANGE
    #
  2. Commitizen工具 npm install -g commitizen cz-conventional-changelog
    "script": {
    ...,
    "commit": "git-cz",
    },
    "config": {
    "commitizen": {
      "path": "node_modules/cz-conventional-changelog"
    }
    }

Change log生成

如果你的所有 Commit 都符合 Angular 格式,那么发布新版本时, Change log 就可以用脚本自动生成。 conventional-changelog 就是生成 Change log 的工具

{
  "scripts": {
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0"
  }
}

几个工具简介

参考

  1. 优雅的提交你的 Git Commit Message : https://zhuanlan.zhihu.com/p/34223150
  2. 使用 "5W1H" 写出高可读的 Git Commit Message : https://zhuanlan.zhihu.com/p/26791124