notes

git 使用规范

分支起名规范

master     主分支(版本发布 只合并不开发)
dev        开发分支(主线开发)
Feature/*  定制开发
Hotfix/*   缺陷修复
Research/* 技术预研
RC/*       版本预发布分支
PROD/*     自动打包发布到后端联调仓库
REPO/*     自动打包发布到后端内传外仓库,用于外办研发联调

提交规范

一般新的 feature 会起一个新的分支,在新分支合并到主线的时候会把分支给删除掉

删除本地分支和删除远端分支

# 删除本地
git branch -d <BranchName>

# 删除远端
git push origin --delete <BranchName>

commit log 规范

feat:    新功能
fix:     修补 bug
docs:    修改文档,比如 README, CHANGELOG, CONTRIBUTE 等等
style:   不改变代码逻辑 (仅仅修改了空格、格式缩进、逗号等等)
refactor:重构(既不修复错误也不添加功能)
perf:     优化相关,比如提升性能、体验
test:    增加测试,包括单元测试、集成测试等
build:    构建系统或外部依赖项的更改
ci:      自动化流程配置或脚本修改
chore:    非 src 和 test 的修改
revert:   恢复先前的提交

快速使用

安装依赖

yarn add -D @commitlint/cli @commitlint/config-conventional commitizen cz-conventional-changelog husky standard-version lint-staged

然后在 package.json 中使用

{
  "scripts": {
    "commit": "git-cz",
    "release": "standard-version", // 通用版本发布
    "major": "standard-version --release-as major", // 主版本发布 1.0.0->2.0.0
    "minor": "standard-version --release-as minor", // 次要版本发布 1.0.0->1.1.0
    "patch": "standard-version --release-as patch", // 补丁版本发布 1.0.0->1.0.1
    "alpha": "standard-version --prerelease alpha", // alpha版本发布 1.0.0->1.0.1-alpha.0
    "beta": "standard-version --prerelease beta"    // beta版本发布 1.0.0->1.0.1-beta.0
  },
  "devDependencies": {
    "@commitlint/cli": "^7.2.1",
    "@commitlint/config-conventional": "^7.1.2",
    "commitizen": "^2.10.1",
    "cz-conventional-changelog": "^2.1.0",
    "husky": "^1.0.0-rc.14",
    "standard-version": "^4.4.0"
  },
  "config": {
    "commitizen": { 
      "path": "node_modules/cz-conventional-changelog" // 让 commitizen 更加易用,可以使用上下箭头选择 
    }
  },
  "standard-version": {
    "skip": {
      "tag": true // standard-version 执行一次后自动会打 tag,使用这个可以取消打 tag
    }
  },
  "commitlint": {
    "extends": [
      "@commitlint/config-conventional"
    ],
    "rules": {}
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged", // commit 之前先执行 lint-staged
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" // 检查 commit log 的格式
    }
  },
  "lint-staged": {
    "src/**/*.{js,vue}": [
      "eslint --fix",
      "git add"
    ]
  }
}

解释

上面的库中,commitizen 有点像是一个基础库,是必装的。

cz-conventional-changelog 是方面我们执行 git-cz 命令时提供可选的箭头。

standard-version 主要作用是生成 changelog,还会自动升 package.json 中的版本号,需要注意的是每执行一次 standard-version 命令就会自动生成一个提交。第一次使用 standard-version 需要执行 standard-version --first-release ,就不会自动升版本。

husky 主要作用是提供钩子(git hook),在 pre-commit 和 commit-msg 的时候自定义事件。会生成一些脚本在 .git/hook 目录下。

@commitlint/cli @commitlint/config-conventional 这两个库用来检查用户输入的 commit log 符不符合规范。

lint-staged 的作用是只验证提交文件。