git cz 规范化 git commit 格式

git cz 规范化 git commit 格式

  1. npm install git-cz --save-dev
  2. npm install commitizen --save-dev
  3. npm install cz-customizable --save-dev
javascript 复制代码
// 这是package.json自动生成的
"config": {
    "commitizen": {
      "path": "./node_modules/cz-customizable"
    },
  }
  1. 根目录新建 .cz-config.cjs
javascript 复制代码
// .cz-config.cjs
module.exports = {
  types: [
    { value: 'update',   name: 'update:   功能开发阶段性提交' },
    { value: 'feat',     name: 'feat:     完整新功能提交' },
    { value: 'fix',      name: 'fix:      修复Bug' },
    { value: 'perf',     name: 'perf:     性能优化(在不影响代码内部行为的前提下,对程序性能进行优化)' },
    { value: 'refactor', name: 'refactor: 代码重构(在不影响代码内部行为、功能下的代码修改)' },
    { value: 'docs',     name: 'docs:     只修改了文档相关的文件(e.g. 修改README.md)' },
    { value: 'style',    name: 'style:    代码风格、不影响代码功能的更改(e.g. 修改空格缩进,换行规范)' },
    { value: 'build',    name: 'build:    影响项目构建或依赖项修改(e.g. 升级webpack到版本5)' },
    { value: 'chore',    name: 'chore:    构建过程、辅助工具等相关的内容修改(e.g. 更新依赖库)' },
    { value: 'revert',   name: 'revert:   恢复上一次提交(e.g. 回滚feat: 增加用户注册功能)' },
  ],

  scopes: [],

  messages: {
    type: '选择一种你提交的类型(必选):',
    scope: '\n自定义更改范围(可选):',
    subject: '短说明(必填):\n',
    body: '长说明, 使用"|"换行(可选):\n',
    breaking: '列举非兼容性的重大变更(可选):\n',
    footer: '关联关闭的issue, 例如: #31, #34(可选)\n',
    confirmCommit: '确认提交?',
  },

  allowBreakingChanges: ['update', 'feat', 'fix'],
};
javascript 复制代码
// 如果 git cz 报错  Unable to find a configuration file,新增一条配置,指定配置文件地址
"config": {
    "commitizen": {
      "path": "./node_modules/cz-customizable"
    },

    // 手动新增
    "cz-customizable": {
      "config": ".cz-config.cjs"
    }
  }

避免绕过 git cz,直接用git commit - m '' 来提交,校验commit message

  1. npm install --save-dev husky
  2. npx husky-init

// 根目录自动生成了.husky文件夹

  1. npm i --save-dev @commitlint/config-conventional @commitlint/cli

  2. package.json 新增scripts

javascript 复制代码
"scripts": {
    "commitlint": "commitlint --config commitlint.config.cjs -e -V"
  },
  1. npx husky add .husky/commit-msg "npm run commitlint"

  2. 根目录新建 commitlint.config.cjs

javascript 复制代码
module.exports = {
  extends: ["@commitlint/config-conventional"],
  rules: {
    "type-enum": [0]
  }
};

现在直接git commit - m '随便填',会报错

项目的package.json(仅供参考)

javascript 复制代码
{
  "name": "integrated-platform",
  "version": "1.0.0",
  "private": true,
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "rimraf dist && vite build",
    "preview": "vite preview",
    "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore",
    "format": "prettier --write src/",
    "commit": "git-cz",
    "commitlint": "commitlint --config commitlint.config.cjs -e -V",
    "prepare": "husky install"
  },
  "dependencies": {
    "@element-plus/icons-vue": "^2.3.1",
    "@vueuse/core": "^11.0.3",
    "axios": "^1.7.7",
    "crypto-js": "^4.2.0",
    "element-plus": "^2.8.1",
    "js-cookie": "^3.0.5",
    "pinia": "^2.1.7",
    "pre-commit": "^1.2.2",
    "vue": "^3.4.29",
    "vue-router": "^4.3.3"
  },
  "devDependencies": {
    "@commitlint/cli": "^19.4.1",
    "@commitlint/config-conventional": "^19.4.1",
    "@iconify-json/ep": "^1.2.0",
    "@iconify-json/ic": "^1.2.0",
    "@rushstack/eslint-patch": "^1.8.0",
    "@vitejs/plugin-vue": "^5.0.5",
    "@vitejs/plugin-vue-jsx": "^4.0.0",
    "@vue/eslint-config-prettier": "^9.0.0",
    "autoprefixer": "^10.4.20",
    "commitizen": "^4.3.0",
    "cz-conventional-changelog": "^3.3.0",
    "cz-customizable": "^7.2.1",
    "eslint": "^8.57.0",
    "eslint-plugin-vue": "^9.23.0",
    "git-cz": "^4.9.0",
    "husky": "^8.0.0",
    "less": "^4.2.0",
    "lint-staged": "^15.2.10",
    "postcss": "^8.4.45",
    "prettier": "^3.2.5",
    "rimraf": "^6.0.1",
    "tailwindcss": "^3.4.10",
    "unplugin-auto-import": "^0.18.2",
    "unplugin-icons": "^0.19.3",
    "unplugin-vue-components": "^0.27.4",
    "vite": "^5.3.1"
  },
  "lint-staged": {
    "**/*.+(js|jsx|ts|tsx|vue)": [
      "eslint --fix",
      "prettier --write"
    ]
  },
  "engines": {
    "node": "18.3.0"
  },
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-customizable"
    },
    "cz-customizable": {
      "config": ".cz-config.cjs"
    }
  }
}

项目的目录结构(仅供参考)

mac 系统 husky 钩子不执行

bash 复制代码
git commit -m '1532'

hint: The '.husky/pre-commit' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.
hint: The '.husky/commit-msg' hook was ignored because it's not set as executable.
hint: You can disable this warning with `git config advice.ignoredHook false`.

[main af74cc4] 1532
 1 file changed, 1 insertion(+), 1 deletion(-)

husky 没有执行权限,项目终端输入,添加执行权限
chmod +x .husky/*

查看钩子的权限

bash 复制代码
 ls -l .husky/pre-commit

 // 只有读权限
 -rw-r--r--@ 1 user  admin  74 Sep  7 20:24 .husky/pre-commit

 chmod +x .husky/pre-commit

 // 加了执行权限
 -rwxr-xr-x 1 user group 1234 May 15 14:00 .husky/pre-commit
相关推荐
也无晴也无风雨1 小时前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
Martin -Tang2 小时前
Vue 3 中,ref 和 reactive的区别
前端·javascript·vue.js
FakeOccupational3 小时前
nodejs 020: React语法规则 props和state
前端·javascript·react.js
放逐者-保持本心,方可放逐3 小时前
react 组件应用
开发语言·前端·javascript·react.js·前端框架
曹天骄4 小时前
next中服务端组件共享接口数据
前端·javascript·react.js
阮少年、5 小时前
java后台生成模拟聊天截图并返回给前端
java·开发语言·前端
郝晨妤6 小时前
鸿蒙ArkTS和TS有什么区别?
前端·javascript·typescript·鸿蒙
AvatarGiser6 小时前
《ElementPlus 与 ElementUI 差异集合》Icon 图标 More 差异说明
前端·vue.js·elementui
喝旺仔la6 小时前
vue的样式知识点
前端·javascript·vue.js
别忘了微笑_cuicui6 小时前
elementUI中2个日期组件实现开始时间、结束时间(禁用日期面板、控制开始时间不能超过结束时间的时分秒)实现方案
前端·javascript·elementui