master 主分支(版本发布 只合并不开发)
dev 开发分支(主线开发)
Feature/* 定制开发
Hotfix/* 缺陷修复
Research/* 技术预研
RC/* 版本预发布分支
PROD/* 自动打包发布到后端联调仓库
REPO/* 自动打包发布到后端内传外仓库,用于外办研发联调
一般新的 feature 会起一个新的分支,在新分支合并到主线的时候会把分支给删除掉
删除本地分支和删除远端分支
# 删除本地
git branch -d <BranchName>
# 删除远端
git push origin --delete <BranchName>
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
的作用是只验证提交文件。