Конфигурация проверки спецификации git commit и конфигурация выпуска версии

Node.js

1. Быстрая настройка и процесс выпуска версии

Эта глава в основном представляет собой краткое изложение следующего содержания для использования в будущем.Если вам нужно узнать подробности, начните чтение с главы 2.

1.1 Установка пакета зависимостей

# husky 包安装
npm install husky --save-dev

# commitlint 所需包安装
npm install @commitlint/config-angular @commitlint/cli --save-dev

# commitizen 包安装
npm install commitizen --save-dev

# standard-version 包安装
npm install standard-version --save-dev

1.2 Настройте commitlint и commitizen

# 生成 commitlint 配置文件
echo "module.exports = {extends: ['@commitlint/config-angular']};" > commitlint.config.js
# commitizen 初始化
npx commitizen init cz-conventional-changelog --save-dev --save-exact

1.3 Обновление package.json

Описание скрипта:

  1. выпуск: Настройте версию, которая будет выпущена, например:npm run release -- 1.0.0
  2. выпуск: 100: выполнить скрипт, затем, если текущая версия 1.0.0, версия будет обновлена ​​​​до 2.0.0.
  3. выпуск: 010: выполнить скрипт, затем, если текущая версия 1.0.0, версия будет обновлена ​​​​до 1.1.0
  4. выпуск: 001: выполнить скрипт, затем, если текущая версия 1.0.0, версия будет обновлена ​​до 1.0.1.
{
  "scripts": {
+   "commit": "git-cz",
+   "release": "standard-version --release-as",
+   "release:100": "npm run release -- major",
+   "release:010": "npm run release -- minor",
+   "release:001": "npm run release -- patch",
  },
+ "husky": {
+   "hooks": {
+     "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
+   }
+ }
}

1.4 метод фиксации

  • Глобальная ситуация может быть использована для установки commitizengit czилиnpm run commitотправить код
  • Доступно, если commitizen не установлен глобальноnpm run commitотправить код

Процесс выпуска версии 1.5

# 1. 切换到指定分支
git checkout master
# 2. 更新代码
git pull origin master
# 3. 版本发布: 生成 CHANGELOG.md 并创建 tag
npm run release -- 1.0.0
# 4. 更新 tag 至远程分支
git push --follow-tags origin master

1.6 Добавление релизов в удаленные репозитории

打开releases

创建releases

编辑releases

2. Используйте husky + commitlint для проверки информации о коммите

2.1 Введение в пакет npm хаски

huskyОсновная функция — добавить в gitgit-хуки, что позволяет нам запускать пользовательские сценарии (скрипты npm), когда в git происходят какие-то важные действия, например, мы можем выполнять определенные пользовательские сценарии для модульного тестирования кода перед git push или выполнять eslint перед git commit Verification, конечно же, это статья в основном знакомит с тем, как использовать husky для добавления хука commit-msg в git и проверки коммита.

  • пакет npm хаски установить
npm install husky --save-dev
  • Обновить package.json
  1. Добавьте хук pre-commit, который будет выводиться в терминал перед git commit我要提交代码啦
  2. Добавьте хук commit-msg, когда git проверит коммит, он выведет все параметры git и ввод в терминал, husky вернет параметры git и ввод через переменную среды HUSKY_GIT_PARAMS HUSKY_GIT_STDIN будет хриплым
  3. Добавьте хук pre-push, который будет выводиться в терминал перед git push提交代码前需要先进行单元测试и выполнитьnpm test
{
+  "husky": {
+    "hooks": {
+      "pre-commit": "echo 我要提交代码啦",
+      "commit-msg": "echo $HUSKY_GIT_PARAMS $HUSKY_GIT_STDIN",
+      "pre-push": "echo 提交代码前需要先进行单元测试 && npn test"
+    }
+  }
}

2.2 Введение в коммитлинт пакета npm

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

2.2.1 формат коммита по умолчанию

commitlintФормат по умолчанию:

# 注意:冒号前面是需要一个空格的, 带 ? 表示非必填信息
type(scope?): subject
body?
footer?
  • область действия относится к области фиксации (какие модули были изменены)
  • тема относится к краткому описанию коммита
  • body относится к содержимому тела коммита (длинное описание)
  • нижний колонтитул относится к фиксации информации нижнего колонтитула
  • тип относится к текущему типу коммита.Как правило, существуют следующие необязательные типы:
Типы описывать
build Основная цель состоит в том, чтобы изменить представление системы сборки проекта (такой как глюк, веб-пакет, конфигурация свертывания и т. д.)
ci Основная цель — изменить коммиты, в которых проект продолжает процесс интеграции (например, Travis, Jenkins, GitLab CI, Circle и т. д.).
docs Обновление документации
feat новые особенности
merge Объединить ветку ?
fix Исправлена ​​ошибка
perf Производительность, оптимизация опыта
refactor Рефакторинг кода (ни новых функций, ни исправлений ошибок)
style Модификации кода, не влияющие на логику программы (изменение пробельных символов, форматирование отступов, заполнение отсутствующих точек с запятой и т. д. без изменения логики кода)
test Добавьте новые тестовые случаи или обновите существующие тесты
revert откатить предыдущий коммит
chore Другие типы, не относящиеся к вышеперечисленным типам

2.2.2 в сочетании с пакетом Husky для использования

  • Установить зависимости
npm install --save-dev @commitlint/config-angular @commitlint/cli
  • Измените package.json: используйте commitlint для настройки скрипта перехватчика commit-msg в конфигурации Husky.
{
  "husky": {
    "hooks": {
+      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }  
  }
}
  • Добавить файл конфигурации commitlint

Добавьте файл commitlint.config.js в проект и выполните простую настройку для commitlint.

Инструкции по настройке:Правило состоит из значения ключа и массива конфигурации, например: 'имя: [0, 'всегда', 72]', первый бит в массиве - уровень (level), необязательные 0, 1, 2, 0 disable (отключено), 1 — предупреждение, 2 — ошибка, второе — применяется ли правило, опционально всегда | никогда, а третье — допустимое значение правила.

module.exports = {
  // 继承默认配置
  extends: [
    "@commitlint/config-angular"
  ],
  // 自定义规则
  rules: {
    'type-enum': [2, 'always', [
      'upd',
      'feat',
      'fix',
      'refactor',
      'docs',
      'chore',
      'style',
      'revert',
    ]],
    'header-max-length': [0, 'always', 72]
  }
};
  • Ниже приведены ситуации проверки нескольких различных сведений о коммите.

测试

3. Используйте commitize для предоставления интерактивного интерфейса при отправке кода

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

3.1 Настройка фиксации

  • Установите инструмент commitizen cli
npm install commitizen -g
  • Инициализировать текущий проект
# 下面面的命令为你做了下面几件事:
## 安装 cz-conventional-changelog npm 模块
## 将添加 config.commitizen 配置
commitizen init cz-conventional-changelog --save-dev --save-exact
  • Используйте git cz вместо git commit для фиксации кода

测试

3.2 Замена git commit скриптами npm

На самом деле, конфигурация приятелей может быть в основном завершена на данный момент, но если он сконфигурирован только здесь, пользователю необходимо установить CZ, в глобальном масштабе при использовании GIT CZ для отправки кода, в противном случае будет сообщена ошибка. Установка приявок по проекту и Добавьте скрипт NPM, пользователи могут отправлять код через сценарий NPM без установленного глобально.

  • Добавить зависимость фиксации
npm install commitizen -D
  • Добавьте npm-скрипты
"scripts": {
+ "commit": "git-cz"
},
  • Если пользователь не устанавливает commitizen глобально, это можно сделать с помощьюnpm run commitКоммитить код вместо git commit

测试

4. Автоматически создавать журнал изменений и версию выпуска

В случае использования вышеуказанной спецификации коммита журнал изменений может быть автоматически сгенерирован через стандартную версию, а информация о версии проекта может быть обновлена ​​для добавления тега git.Журнал изменений будет включать все коммиты, тип которых feat и исправить.

4.1 установка и настройка стандартной версии

  • установить стандартную версию
npm i --save-dev standard-version
  • Настроить команды скрипта npm
{
  "scripts": {
+   "release": "standard-version"
  }
}

4.2 Процесс выпуска версии

  • переключиться на основную ветку
git checkout master
  • вытащить удаленную ветку
git pull origin master
  • Получить удаленную информацию
git fetch origin --prune
  • Автоматически создавать список изменений и обновлять версию до 1.0.0
# 下面面的命令为你做了下面几件事:
## 修改 package.json 中的版本号
## 使用 legacy -changelog 更新 CHANGELOG.md
## 提交 package.json 和 CHANGELOG.md
## 添加 tag
npm run release -- --release-as 1.0.0
  • Обновите локальный тег до удаленной ветки
git push --follow-tags origin master

4.3 Добавление релизов в удаленные репозитории

打开releases

创建releases

编辑releases