Стандартная автоматизация для git commit , CHANGELOG и выпусков версий

внешний интерфейс Git
Стандартная автоматизация для git commit , CHANGELOG и выпусков версий
Все это время, из-за быстрого темпа итерации командного проекта, журнал изменений и обновление версии каждого выпуска выполняются через человеческую плоть. Иногда я очень занят, и мне кажется, что я не могу вручную писать эти обновления. Новичкам в коллективе, иногда в экстренных случаях, еще более грязно, а старших одноклассников коллектива еще надо побеспокоить. Очевидно, что эти задачи не подходят для средств автоматизации.

Эта статья представляет собой учебник по автоматизации проектов. В сообществе есть много решений для четырех типов проблем. Сегодня основное введение здесьonventional-changelogСодержимое, связанное с программой. Если вы думаете или пытаетесь решить эту проблему, вы можете знать.

onventional-changelog

onventional-changelogотносится к конкретному проектуcommitа такжеmetadataИнформация генерируется автоматическиchangelogsа такжеrelease notesсерии инструментов, а во вспомогательныхstandard-versionВ случае с инструментами он может автоматически завершить генерацию за вас.version,битьtag, генерироватьCHANGELOGи другие серии процессов.

Экологический основной модуль с обычным журналом изменений

  • conventional-changelog-cli- основной инструмент командной строки обычного списка изменений
  • standard-changelog- Инструмент командной строки для углового формата фиксации
  • conventional-github-releaser- Инструмент публикации для Github с использованием метаданных git.
  • conventional-commits-detector- Обнаружение ссылки на спецификацию сообщения COMMIT
  • commitizen- Простая спецификация фиксации для разработчиков
  • commitlint- зафиксировать инструмент Lint

Вышеonventional-changelogНесколько основных модулей, имеющих экологическое значение, эти инструменты часто используются вместе в реальной работе, конечно, это также необходимо определить в соответствии с вашей собственной ситуацией. Пространство ограничено, сегодня мы в основном представимcommitizen,conventional-changelog-cli,standard-versionэти три инструмента.

commitizen

commitizenЭто инструмент для стандартизации информации о фиксации git. В отсутствие спецификаций информация о фиксации разработчиков часто является произвольной, что делает информацию о фиксации бесполезной. но когда ты делаешьgit log,code review,записыватьchangelogи так далее, хорошо Спецификация коммита особенно важна.

коммитизен установить

$ npm install -g commitizen
# 或者本地安装
$ npm install --save-dev commitizen

Установите адаптер (адаптер)

Поскольку разные проекты строятся по-разному, commitizen поддерживает расширение разных адаптеров для удовлетворения разных требований сборки. В этой статье в основном используетсяcz-conventional-changelogКонечно, вы также можете выбрать другие адаптеры в зависимости от конкретной ситуации, подробнеепожалуйста, посмотри.

$ npm install -g cz-conventional-changelog

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

// path 用来指定适配器
{ "path": "cz-conventional-changelog" }

локальная установка

$ npm install cz-conventional-changelog --save-dev
# 或者使用 commitizen 工具
$ commitizen init cz-conventional-changelog --save-dev --save-exact

Инструмент commitizen автоматическиpackage.jsonДобавьте соответствующую конфигурацию в конфигурацию следующим образом:

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

После установки и добавления мы можем использоватьgit czподстановка командыgit commitприходи в употребление. Мы модифицируем файл иgit addПосле этого черезgit czпопытайся:

Как видите, git cz предоставляет несколько вариантов коммитов, а именно:

  • использовать новые функции
  • исправить ошибку
  • обновление документации документов
  • форматирование кода стиля, обновление пунктуации
  • рефакторинг кода рефакторинг
  • оптимизация производительности
  • тестовое тестовое обновление
  • сборка системы сборки или обновление зависимостей пакета
  • ci Конфигурация CI, файлы сценариев и т. д. обновлены
  • рутинное обновление не-src или тестовых файлов
  • отменить откат фиксации

При его использовании мы должны выбирать его в соответствии с конкретными изменениями проекта. Если вы хотите изменить введенную информацию о коммите, мы можем передатьgit resetкоманду исправить.

Следует отметить, что добавить инструмент фиксации недостаточно, для обеспечения согласованности формата фиксации настоятельно рекомендуется не забыть интегрироватьcommitlintинструмент, подходитgit commit-msg hookЧтобы использовать, я не верю в введение здесь, вы можете проверить официальную документацию для деталей.

conventional-changelog-cli

conventional-changelog-cliРекомендуемые по умолчанию критерии фиксации взяты изangularПроект, помимо стандарта angular, на данный момент интегрируется сatom, codemirror, ember, eslint, express, jqueryСтандарт других предметов можно выбрать по своему вкусу.

Установить

# Help conventional-changelog --help
$ npm install -g conventional-changelog-cli

основное использование

$ conventional-changelog -p angular -i CHANGELOG.md -s

Параметры в приведенной выше команде-p angularИспользуется для указания используемого стандарта сообщения фиксации, если вы хотите использоватьatomстандарт:

$ conventional-changelog -p atom -i CHANGELOG.md -s

параметр-i CHANGELOG.mdозначает отCHANGELOG.mdчитать журнал изменений,-sУказывает, что журнал изменений для чтения и записи — это один и тот же файл. Следует отметить, что журнал изменений, сгенерированный приведенной выше командой, основан на изменениях (функция, исправление, критические изменения и т. д.) после последней версии тега, поэтому, если вы хотите сгенерировать все предыдущие Журнал изменений, сгенерированный информацией о коммите, должен использовать эту команду:

$ conventional-changelog -p angular -i CHANGELOG.md -s -r 0

в-rУказывает количество версий выпуска, необходимых для создания журнала изменений, по умолчанию — 1, все — 0.

специальные параметры

Некоторое общее содержимое в сгенерированном журнале изменений может быть изменено в соответствии с требованиями с помощью пользовательских параметров, таких как номер версии, адрес фиксации и т. д. Номер версии, сгенерированный в журнале изменений, взят изpackage.jsonПолучить поле версии из . Нам нужно изменить адрес хранилища фиксации соединенияpackage.jsonсерединаrepositoryAddress, адрес подключения по умолчанию для issuse в журнале изменений также основан наrepositoryгенерировать. Если вы используете стороннюю систему совместной работы (например, битбакет), вы можете использовать этот стандарт.conventional-changelog-angular-bitbucket. Или, например, мы используем Redmine для решения проблемы, а затем создаем журнал изменений. можно использовать позжеreplaceИнструменты для обработки устаревших адресов в тексте:

$ replace 'https://github.com/myproject/issues/' 'https://redmine.example.com' CHANGELOG.md

Наконец, взгляните на грубо сгенерированный эффект:

Обычный журнал изменений. Можно увидеть дополнительные параметры конфигурации.здесь.

standard-version

standard-versionявляется последователемСемантическое управление версиями (semver)а такжеСтандартная спецификация сообщения фиксацииверсия и инструмент автоматизации журнала изменений. При нормальных обстоятельствах мы будем выполнять следующие операции выпуска версии в основной ветке:

1. git pull origin master
2. 根据 pacakage.json 中的 version 更新版本号,更新 changelog
3. git add -A, 然后 git commit
4. git tag 打版本操作
5. push 版本 tag 和 master 分支到仓库

Среди них 2, 3 и 4 — это задачи, которые инструмент стандартной версии будет выполнять автоматически.С помощью локальных сценариев оболочки можно автоматически выполнить серию выпусков версий.

Установить и использовать

Здесь я все еще рекомендую глобальную установку:

$ npm install -g standard-version
# 或者
$ npm install --save-dev standard-version

воплощать в жизнь:

# Help standard-version --help
$ standard-version

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

--release-as, -r указать номер версии

По умолчанию инструмент автоматически генерирует номер версии в соответствии с основными, дополнительными правилами или правилами исправления.Например, если версия в вашем package.json равна 1.0.0, то номер версии после выполнения будет Да: 1.0.1 . Персонализация может быть выполнена:

$ standard-version -r minor
# output 1.1.0
$ standard-version -r 2.0.0
# output 2.0.0
$ standard-version -r 2.0.0-test
# output 2.0.0-test

Следует отметить, что названия версий здесь не являются случайными символами, а должны следоватьСемантическое управление версиями (semver)нормативный

--prerelease, -p название предварительной версии

Используется для создания предварительных версий, если номер текущей версии, например, 2.0.0.

$ standard-version --prerelease alpha
# output 2.0.0-alpha.0

--tag-prefix, -t префикс тега версии

Используется для префикса сгенерированных тегов тегов, например, если номер предыдущей версии — 2.0.0, то:

$ standard-version --tag-prefix "stable-"
# output tag: stable-v2.0.0

Мы можем использовать больше вышеуказанных параметров, и есть другие параметры, которые можно передать черезstandard-version --helpПроверить.

Интегрировать нпм

Наконец, не забудьте интегрировать команду в npm.package.jsonи используется со сценариями оболочки следующим образом:

"scripts": {
    "release": "./scripts/release.sh",
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md && npm run changeissueurl",
    "changeissueurl": "replace 'https://github.com/myproject/issues/' 'https://redmine.example.com/' CHANGELOG.md"
  },
  
// 配置好后使用 npm run 执行发布
$ npm run release

Добавить кrelease.shсценарий:

#!/bin/bash

# Release branch
master="master"
prefix="DTinsight_v"

git pull origin $master
echo "Current pull origin $master."

# Auto generate version number and tag
standard-version -r $release --tag-prefix $prefix

git push --follow-tags origin $master

echo "Git push origin $master"
echo "Release finished."

Приведенный выше скрипт выполняет простое ветвление.pull, воплощать в жизньstandard-versionи окончательная версияpushЕсли вы хотите сделать некоторые настраиваемые параметры выполнения, вам необходимо выполнить индивидуальную модификацию.

наконец

Инжиниринг проекта — очень интересная вещь, с помощью автоматизированных инструментов можно эффективно улучшить ремонтопригодность и качество проекта, а также избежать многих неопределенностей. Если вы обнаружите эти проблемы в своей работе, и не хотите продолжать решать эти проблемы через человеческую плоть, то попробуйте скорее~