commitizen + хаски каноническая информация о коммите git

Git
commitizen + хаски каноническая информация о коммите git

предисловие

Был ли у вас когда-нибудь такой опыт:

  1. Пришло время уйти с работы, отправить код и быстро уйти, (git add .) (git commit -m "pull it") (git push);
  2. Модифицированные вещи немного сложны, я не знаю, что писать в информации о представлении, и это еще одна пощечина, поэтому она представлена;
  3. Отправил на некоторое время, искал две строчки слезы, хотел найти модификацию на тот момент и обнаружил, что не могу запустить. . . .

Есть инструменты для любых нужд.Для этих задач спецификации, используемые командой Angular, сейчас наиболее часто используются в отрасли, редактор vim появляется, когда git commit используется для редактирования информации о представлении типа шаблона.Основной формат составляет:

<type>(<scope>):<subject>
<BlLANK_LINE>
<?body>
<BLANK_LINE>
<?footer>

  • Первая строка обязательна: в основном [Тип представления (Область воздействия): Краткое описание]
  • тело подробное описание, я никогда не использовал его лично
  • Нижний колонтитул был критическим изменением или закрытой проблемой

Установить

Личные привычки направлены на настройки проекта, поэтому устанавливайте прямо в проекте вместо глобальной конфигурации, принцип тот же

$ npm i -D commitizen cz-conventional-changelog
$ npm i -g commitizen cz-conventional-changelog

### package.json

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

Здесь, если вы устанавливаете в глобальном режиме, вам нужно создать файл .czrc в глобальном корневом каталоге, а затем ввести содержимое в файл{“path”:"cz-conventional-changelog"}Или введите следующую команду:

echo '{"path":"cz-conventional-changelog"}' > ~/.czrc

Если вы используете глобальную установку, то теперь вы переходите в каталог проекта и используетеgit czВы можете увидеть всплывающее содержимое редактора vim с помощью команды.Если это установка на уровне проекта, вы можете настроить текущую команду в команде сценариев в package.json (вводится файл конфигурации определенного типа типа)

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


После выбора типа фиксации вы сможете продолжить выбор области действия кода.


После выбора сферы влияния вам будет предложено заполнить краткую информацию, подробную информацию, информацию нижнего колонтитула, а также следует ли подавать (не обрисовывать по порядку, а дописать ключ ввода к следующему шагу)

проверка фиксации

После вышеописанной операции, по сути, для сознательного человека достаточно, но ограничения нет, а значит свобода, а свобода означает, что кто-то переходит черту. так как я могу дать эти свободы?Добавить некоторые ограничения?

$ npm i -D @commitlint/config-conventional @commitlint/cli

Создайте файл конфигурации в каталоге проектаcommitlint.config.js или .commitlintrc.js

module.exports = {
    extents:[
        "@commitlint/config-conventional"
    ],
    rules:{
        'body-leading-blank': [1, 'always'],
        'footer-leading-blank': [1, 'always'],
        'header-max-length': [2, 'always', 72],
        'scope-case': [2, 'always', 'lower-case'],
        'subject-case': [
            2,
            'never',
            ['sentence-case', 'start-case', 'pascal-case', 'upper-case']
        ],
        'subject-empty': [2, 'never'],
        'subject-full-stop': [2, 'never', '.'],
        'type-case': [2, 'always', 'lower-case'],
        'type-empty': [2, 'never'],
        'type-enum': [
            2,
            'always',
            [
                'build',
                'chore',
                'ci',
                'docs',
                'feat',
                'fix',
                'improvement',
                'perf',
                'refactor',
                'revert',
                'style',
                'test'
            ]
        ]
    }
}

вы можете использоватьОфициальный сайтспособ проверить, соответствует ли ваша фиксация спецификации



Хаски лимит

Проверяйте сообщения коммитов в сочетании с git hooks, которые не позволяют вам совершать коммиты, когда ваши коммиты не соответствуют спецификации.

$ npm i -D husky

package.json

"husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  }

Таким образом, когда вы не соответствуете спецификации, вы не сможете отправить (у меня здесь пустая область, и я отказываюсь от отправки)


Пользовательская спецификация коммита

Конечно, если вы хотите определить спецификацию отправки самостоятельно, вы должны сначала загрузить пакет ограничений пользовательской спецификации, чтобы заменить спецификацию, используемую командой Angular.

$ npm i -D commitlint-config-cz  cz-customizable
###并且在项目根目录创建.cz-config.js

commitlint.config.js (rules — это мои пользовательские правила, здесь используются одновременно две спецификации, вам может понадобиться только cz)

module.exports = {    
    extends: [        
        '@commitlint/config-conventional',
        'cz'    
    ],
     rules:{
      // Header 
     'header-max-length': [2, 'always', 200],
      // <type>枚举
      'type-enum': [2, 'always', [
        'init',
        'feat',
        'fix',
        'ui',
        'refactor',
        'replace',
        'deploy',
        'docs',
        'test',
        'chore',
        'style',
        'revert',
        'add',
        'minus',
        'del'
      ]],
      // <type> 不能为空
      'type-empty': [2, 'never'],
      // <type> 格式 小写 
     'type-case': [2, 'always', 'lower-case'],
      // <scope> 不能为空
      'scope-empty': [2, 'never'],
      // <scope> 格式 小写
      'scope-case': [2, 'always', 'lower-case'],
      // <subject> 不能为空
      'subject-empty': [2, 'never'],
      // <subject> 以.为结束标志
      'subject-full-stop': [2, 'never', '.'],
      // <subject> 格式
      // 可选值
      // 'lower-case' 小写 lowercase
      // 'upper-case' 大写 UPPERCASE
      // 'camel-case' 小驼峰 camelCase
      // 'kebab-case' 短横线 kebab-case
      // 'pascal-case' 大驼峰 PascalCase
      // 'sentence-case' 首字母大写 Sentence case
      // 'snake-case' 下划线 snake_case
      // 'start-case' 所有首字母大写 start-case
      'subject-case': [2, 'never', []],
      // <body> 以空行开头
      'body-leading-blank': [1, 'always'],
      // <footer> 以空行开头
      'footer-leading-blank': [1, 'always']
    }}

package.json

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

.cz-config.js (это моя пользовательская конфигурация)

module.exports = {
  types: [
    {      value: 'init',      name: 'init:     初始提交'    },
    {      value: 'feat',      name: 'feat:     增加新功能'    },
    {      value: 'fix',      name: 'fix:      修复bug'    },
    {      value: 'ui',      name: 'ui:       更新UI'    },
    {      value: 'refactor',      name: 'refactor: 代码重构'    },
    {      value: 'release',      name: 'release:  发布'    },
    {      value: 'deploy',      name: 'deploy:   部署'    },
    {      value: 'docs',      name: 'docs:     修改文档'    },
    {      value: 'test',      name: 'test:     增删测试'    },
    {      value: 'chore',      name: 'chore:    更改配置文件'    },
    {      value: 'style',      name: 'style:    样式修改不影响逻辑'    },
    {      value: 'revert',      name: 'revert:   版本回退'    },
    {      value: 'add',      name: 'add:      添加依赖'    },
    {      value: 'minus',      name: 'minus:    版本回退'    },
    {      value: 'del',      name: 'del:      删除代码/文件'    }
  ],
  scopes: [],
  messages: {
    type: '选择更改类型:\n',
    scope: '更改的范围:\n',
    // 如果allowcustomscopes为true,则使用
    // customScope: 'Denote the SCOPE of this change:',
    subject: '简短描述:\n',
    body: '详细描述. 使用"|"换行:\n',
    breaking: 'Breaking Changes列表:\n',
    footer: '关闭的issues列表. E.g.: #31, #34:\n',
    confirmCommit: '确认提交?'
  },
  allowCustomScopes: true,
  allowBreakingChanges: ["feat", "fix"]};

Опираясь на китаизацию веб-статьи.cz-config.jsЗабыл сохранить конкретный адрес, найду позже

'use strict';
module.exports = {
  types: [
    {value: '✨特性',     name: '特性:    一个新的特性'},
    {value: '🐛修复',     name: '修复:    修复一个Bug'},
    {value: '📝文档',     name: '文档:    变更的只有文档'},
    {value: '💄格式',     name: '格式:    空格, 分号等格式修复'},
    {value: '♻️重构',     name: '重构:    代码重构,注意和特性、修复区分开'},
    {value: '⚡️性能',     name: '性能:    提升性能'},
    {value: '✅测试',     name: '测试:    添加一个测试'},
    {value: '🔧工具',     name: '工具:    开发工具变动(构建、脚手架工具等)'},
    {value: '⏪回滚',     name: '回滚:    代码回退'}  ],
  scopes: [
    {name: '模块1'},
    {name: '模块2'},
    {name: '模块3'},
    {name: '模块4'}
  ],
  // it needs to match the value for field type. Eg.: 'fix'
  /*  scopeOverrides: {
    fix: [
      {name: 'merge'},
      {name: 'style'},
      {name: 'e2eTest'},
      {name: 'unitTest'}
    ]
  },  */
  // override the messages, defaults are as follows
  messages: {
    type: '选择一种你的提交类型:',
    scope: '选择一个scope (可选):',
    // used if allowCustomScopes is true
    customScope: 'Denote the SCOPE of this change:',
    subject: '短说明:\n',
    body: '长说明,使用"|"换行(可选):\n',
    breaking: '非兼容性说明 (可选):\n',
    footer: '关联关闭的issue,例如:#31, #34(可选):\n',
    confirmCommit: '确定提交说明?'  },
  allowCustomScopes: true,
  allowBreakingChanges: ['特性', '修复'],
  // limit subject length
  subjectLimit: 100};

### commitlint.config.js

module.exports = {
        extends: [
                'cz'
        ]
}

### package.json
"config": {
    "commitizen": {
      "path": "node_modules/cz-customizable"
    }
  },

Наконец: если вы думаете, что это поможет вам, оставьте след! Если вы считаете, что в статье что-то не так, оставьте комментарий!