俗话说,没有规矩不成方圆,咱们的git也需求标准。

下面介绍一下企业常用的一些标准。

分支办理标准

分支命名不能千奇百怪,必须有统一的命名方法。主要有以下几种:

分支办理 命名标准 解释
master 主分支 master 安稳版别分支,上线完成回归后后,由项目技能负责人从 release 分支兼并进来,并打 tag
test 测验分支 test/yyyyMMdd_ 功用称号示例:test/20220426_blog 测验人员运用分支,测验时从 feature 分支兼并进来
feature 功用开发分支 feature/yyyyMMdd_ 功用称号_负责人员示例:feature/20220426_blog_xiumubai 新功用开发运用分支,根据master树立
fix bug修正分支 fix/yyyyMMdd_ 功用称号_负责人员示例:fix/20220426_blog_xiumubai 紧急线上bug修正运用分支,根据master树立
release 上线分支 release/版别号示例:release/0.1.0 用于上线的分支,根据 master 树立,必须对要并入的 feature 分支进行 Code review 后,才可并入上线

版别号办理标准

当咱们上线的时分,需求给版别号打tag,下面是版别号标准:

项目上线release分支创建界说:
第一个数字是主版别。第二个数字是次版别。第三个数字是补丁版别(hotfix 类的更新)。
主版别:含有破坏性更新、大调整等。 例如:1.1.0 > 2.0.0
次版别:添加新功用特性。例如:1.1.0 > 1.2.0
补丁版别:修正问题等。例如:1.1.0 > 1.1.1

下图是一个环绕git标准来的开发流程图

Gitlab上手指南(八)|企业中常见的git规范介绍和husky+commitlint集成

提交信息标准

最后是commit的时分,需求对commit信息标准,必须要加前缀

前缀 解释
feat 新功用
fix 修正
docs 文档改变
style 代码格式
refactor 重构
perf 功能优化
test 添加测验
revert 回退
build 打包
chore 构建进程或辅助东西的变化

下图是vue3源码的提交信息标准:

Gitlab上手指南(八)|企业中常见的git规范介绍和husky+commitlint集成

下面咱们就实际操作一下,假如经过husky+commitlint集成一个统一标准的git commit信息。

装备 git 提交的校验钩子

  • husky: git提交时触发hooks
  • commitlint: 对提交的内容做标准校验 husky,主要对pre-commit和commit-msg钩子做校验。
# 装置husky
yarn add husky -D
# 初始化husky装备,在根目录新增.husky装备文件。初始化装备pre-commit
npx husky-init 
# 另外新增一个hooks,commit-msg
npx husky add .husky/commit-msg 

目录结构是下面这样子的:

Gitlab上手指南(八)|企业中常见的git规范介绍和husky+commitlint集成

commit-msg文件中添加 npm run commitlint

pre-commit文件中有个npm run test咱们先注释掉,不然会报错。

装置commitlint

# 添加依赖文件
yarn add @commitlint/config-conventional @commitlint/cli -D

添加装备文件,新建commitlint.config.js,然后添加下面的代码:

module.exports = {
  extends: ['@commitlint/config-conventional'],
  // 校验规矩
  rules: {
    'type-enum': [
      2,
      'always',
      [
        'feat',
        'fix',
        'docs',
        'style',
        'refactor',
        'perf',
        'test',
        'chore',
        'revert',
        'build',
      ],
    ],
    'type-case': [0],
    'type-empty': [0],
    'scope-empty': [0],
    'scope-case': [0],
    'subject-full-stop': [0, 'never'],
    'subject-case': [0, 'never'],
    'header-max-length': [0, 'always', 72],
  },
}

装备scripts

因为咱们需求运转npm run commitlint,所以需求在package.json文件中添加如下代码:

# 在scrips中添加下面的代码
{
"scripts": {
    "commitlint": "commitlint --config commitlint.config.js -e -V"
  },
}

装备结束,现在当咱们填写commit信息的时分,前面就需求带着下面的subject

'feat',
'fix',
'docs',
'style',
'refactor',
'perf',
'test',
'chore',
'revert',
'build',

比方:git commit -m "feat: test",留意feat:后面有个空格

咱们来写一个错误的来测验一下:

Gitlab上手指南(八)|企业中常见的git规范介绍和husky+commitlint集成

提示subject是空的。

运用正确的提交方法,提交成功了

Gitlab上手指南(八)|企业中常见的git规范介绍和husky+commitlint集成

运用 commitizen 做git标准化提交

由于添加了commitlint验证,对于不熟悉提交标准的新手同学会有必定影响,能够添加 commitizen 东西,手动生成标准化commit。

Commitizen是一个格式化commit message的东西。

# 东西装置
yarn add -D commitizen

运用cz-conventional-changelog

装置东西

yarn add cz-conventional-changelog -D

装备命令

"script": {
    "commit": "cz"
}

在package.json 中添加界说commitizen运用规矩,

{
	"config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
  },
}

当执行git commit的时分,就能够提示咱们填写代码规矩了

自界说 commitizen 规矩

运用 cz-customizable 东西

# 装置依赖
yarn add cz-customizable -D

装备命令

"script": {
    "commit": "git-cz"
}

在package.json 中添加自界说commitizen,运用git-cz执行git commit命令

"config": {
    "commitizen": {
        "path": "./node_modules/cz-customizable"
    }
}

在根目录创建的.cz-config.js, 自界说commit提示内容

module.exports = {
  types: [
    { value: 'feat', name: '✨feat:     新功用' },
    { value: 'fix', name: 'fix:      修正' },
    { value: 'docs', name: '✏️docs:     文档改变' },
    { value: 'style', name: 'style:    代码格式(不影响代码运转的变化)' },
    {
      value: 'refactor',
      name: '♻️refactor: 重构(既不是添加feature,也不是修正bug)'
    },
    { value: 'perf', name: '⚡️perf:     功能优化' },
    { value: 'test', name: '✅test:     添加测验' },
    { value: 'chore', name: 'chore:    构建进程或辅助东西的变化' },
    { value: 'revert', name: '⏪️revert:   回退' },
    { value: 'build', name: '️build:    打包' },
    { value: 'ci', name: 'CI:   related changes' }
  ],
  // override the messages, defaults are as follows
  messages: {
    type: '请挑选提交类型(必选):',
    // scope: '请输入文件修正规模(可选):',
    customScope: '请输入修正规模(可选):',
    subject: '请扼要描述提交(必填):',
    // body: '请输入详细描述(可选,待优化去除,越过即可):',
    // breaking: 'List any BREAKING CHANGES (optional):\n',
    footer: '请输入要关闭的issue(待优化去除,越过即可):',
    confirmCommit: '承认运用以上信息提交?(y/n/e/h)'
  },
  // used if allowCustomScopes is true
  allowCustomScopes: true,
  // allowBreakingChanges: ['feat', 'fix'],
  skipQuestions: ['body', 'footer'],
  // limit subject length, commitlint默认是72
  subjectLimit: 72
}

当咱们提交代码的时分,需求先git add .,然后执行npm run commit,就能够根据呼应的提示填写commit信息 了,如下图所示:

Gitlab上手指南(八)|企业中常见的git规范介绍和husky+commitlint集成