Стандартизируйте сообщение коммита и автоматически сгенерируйте CHANGELOG.md в соответствии с коммитом

внешний интерфейс GitHub Командная строка Angular.js
Стандартизируйте сообщение коммита и автоматически сгенерируйте CHANGELOG.md в соответствии с коммитом

адрес проекта:GitHub.com/sunshine940...

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

Поэтому сообщение коммита очень важно. Для некоторых нерегулярных коммитов вы можете не знать цель коммита через месяц ヘ(;´Д`ヘ),

Таким образом, чтобы в будущем было удобнее возобновлять (zhao) диск (guo), командам необходимо соблюдать один и тот же набор спецификаций сообщений фиксации.

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

commit messageроль

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

commit messageформат

Как упоминалось ранее, мы используемУгловая спецификация, следующее:

использоватьgit commitМожно отправить несколько строкcommit message.

commit messageВключает в себя три части:Header,BodyиFooter

<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>

в,Headerтребуется,BodyиFooterявляется необязательным.

Header

HeaderСодержит три поля:type(обязательный),scope(необязательно) иsubject(обязательный)

type

typeдля иллюстрацииcommitкатегории разрешены только следующие 7 логотипов.

  • подвиг: новая функция (особенность)
  • исправить: исправить ошибки
  • документы: Документация
  • style: Формат (изменения, не влияющие на выполнение кода)
  • рефакторинг: рефакторинг (то есть не новая функция и не изменение кода, исправляющее ошибку)
  • тест: добавить тест
  • рутинная работа: изменения в процессе сборки или вспомогательные инструменты

typeзаfeatиfix, тоcommitобязательно появится вChange logсреди.

scope

scopeдля иллюстрацииcommitОбъем влияния, такой как уровень данных, уровень управления, уровень представления и т. д., варьируется от проекта к проекту.

subject

subjectдаcommitКраткое описание цели, не более 50 символов

以动词开头,使用第一人称现在时,比如 change,而不是 changed 或 changes
第一个字母小写
结尾不加句号(.)

body

Bodyчасть этогоcommitПодробное описание можно разделить на несколько строк. Ниже приведен пример.

More detailed explanatory text, if necessary.  Wrap it to 
about 72 characters or so. 

Further paragraphs come after blank lines.

- Bullet points are okay, too
- Use a hanging indent

Footer

FooterДетали используются только в двух случаях

  • Несовместимые изменения

Если текущий код несовместим с предыдущей версией, тоFooterчасть сBREAKING CHANGEВ начале следует описание изменения, а также причина изменения и способ миграции.

  • закрытиеIssueесли текущийcommitдля определенногоissue, тогда ты можешьFooterЧастично закрыть этоissue
Closes #123, #245, #992

Commitizen-- Автоматически генерировать квалифицированныеcommit message

Судя по приведенному выше описанию, вы пишете эмоционально?commit messageОчень хлопотно, вот введениеCommitizen-- Возможность автоматически генерировать спецификации, соответствующие подсказкамcommit message

Установить

$ npm install -g commitizen

использовать в проекте

Затем в каталоге проекта выполните следующую команду, чтобы он поддерживалAngularизCommit messageФормат.

$ commitizen init cz-conventional-changelog --save --save-exact

commit

доступно при отправкеgit czВы можете создавать автоматизированныеcommit message

Commitizen

validate-commit-msgПроверьте своиcommit-messageСпецификация

Commitizenможет помочь нам регулировать наши собственныеcommit-message, а в коллективе, как регулировать поведение других членовcommitЧто со спецификацией?

можно использоватьvalidate-commit-msgчтобы проверить ваш проектcommit-messageСоответствует ли он формату

validate-commit-msgУстановить

npm install --save-dev validate-commit-msg

huskyУстановить

в соответствии сREADME в сообщении подтверждения-фиксациинаписано, вы можете использоватьvalidate-commit-msgДействует как github для проверки сообщений фиксации и рекомендуетhusky.

This provides you a binary that you can use as a githook to validate the commit message. I recommend husky. You'll want to make this part of the commit-msg githook, e.g. when using husky, add "commitmsg": "validate-commit-msg" to your npm scripts in package.json.

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

npm install husky --save-dev

И вpackage.jsonсерединаscriptsдобавить в поле

"commitmsg": "validate-commit-msg"

потом каждый разgit commitПосле этого он автоматически проверитcommit messageПраво. В случае неудачи будет сообщено об ошибке

husky > commit-msg (node v9.2.1)
INVALID COMMIT MSG: does not match "<type>(<scope>): <subject>" !
change
husky > commit-msg hook failed (add --no-verify to bypass)

Создать журнал изменений

Если все ваши коммиты соответствуют формату Angular, то при выпуске новой версии журнал изменений может быть автоматически сгенерирован скриптом.

Созданный документ включает в себя следующие три раздела.

  • New features
  • Bug fixes
  • Breaking changes.

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

conventional-changelogавтоматически на основеcommitгенерироватьchange log

conventional-changelogУстановить

npm install -g conventional-changelog-cli

conventional-changelogРабочий процесс

  • Make changes
  • Commit those changes
  • Make sure Travis turns green
  • Bump version in package.json
  • conventionalChangelog
  • Commit package.json and CHANGELOG.md files
  • Tag
  • Push

conventionalChangelogЕсть два варианта этого шага

# 不会覆盖以前的 Change log,只会在 CHANGELOG.md 的头部加上自从上次发布以来的变动
$ conventional-changelog -p angular -i CHANGELOG.md -s -p 

# 生成所有发布的 Change log
$ conventional-changelog -p angular -i CHANGELOG.md -w -r 0

Уведомление:

  • Здесь установлен обычный-changelog-cli, а обычный-changelog: команда не найдена, будет сообщено об ошибке, когда будет установлен обычный-changelog.
  • Проверил много статей, используяconventional-changelog -p angular -i CHANGELOG.md -w, чтобы в командной строке можно было зарегистрировать только содержимое CHANGELOG, а файлы не генерировались.Если вы хотите генерировать файлы, вам нужно использоватьconventional-changelog -p angular -i CHANGELOG.md -s. Можно использовать больше конфиговconventional-changelog --helpПроверять
  • Также следует отметить, что перед генерацией чанлога нужно использовать$ npm version [version]Измените номер версии, а затем сгенерируйте журнал изменений. Многие сообщения в блогах не пишутся на этом этапе, что приведет к тому, что в постепенно сгенерированном CHANGELOG всегда будут предыдущие записи фиксации.

Автоматически определять номер версии

Есть два места, которые необходимо оптимизировать на вышеуказанных шагах.

  • Нужно изменить номер версии перед обычным Changelog
  • генерироватьCHANGELOG.mdПосле этого были внесены новые изменения, поэтому нужно выполнить еще один коммит

Итак, нам нужно автоматизировать это,commitizenтакже на основеconventional message, создать экологическую

Используйте эти инструменты, чтобы упростить процесс публикации.

cp package.json _package.json &&
preset=`conventional-commits-detector` && 
echo $preset &&
bump=`conventional-recommended-bump -p angular` &&
echo ${1:-$bump} &&
npm --no-git-tag-version version ${1:-$bump} &>/dev/null &&
conventional-changelog -i CHANGELOG.md -s -p ${2:-$preset} &&
git add CHANGELOG.md package.json package-lock.json &&
version=`cat package.json` &&
git commit -m'docs(CHANGELOG): $version' &&
mv -f _package.json package.json &&
npm version ${1:-$bump} -m 'chore(release): %s' &&
git push --follow-tags 

Спецификация в вашем проектеcommit messageи согласноcommitСоздано автоматическиCHANGELOG.md

  1. Установить зависимости
npm install -g commitizen conventional-changelog conventional-changelog-cli conventional-commits-detector conventional-recommended-bump husky validate-commit-msg

После завершения установки версия следующая (я встречалconventional-recommended-bumpда4.xверсия сообщит об ошибкеError: Unable to load the "angular" preset package. Please make sure it's installed.. Просто понизьте версию.

/usr/local/lib
├── commitizen@3.0.4
├── conventional-changelog@2.0.3
├── conventional-changelog-cli@2.0.5
├── conventional-commits-detector@0.1.1
├── conventional-recommended-bump@0.3.0
└── npm@6.1.0
  1. существуетpackage.jsonувеличить вscriptполе
    "changelog": "cp package.json _package.json &&preset=`conventional-commits-detector` && echo $preset && bump=`conventional-recommended-bump -p angular` && echo ${1:-$bump} && npm --no-git-tag-version version ${1:-$bump} &>/dev/null && conventional-changelog -i CHANGELOG.md -s -p ${2:-$preset} && git add CHANGELOG.md package.json package-lock.json && version=`cat package.json` && git commit -m'docs(CHANGELOG): $version' && mv -f _package.json package.json && npm version ${1:-$bump} -m 'chore(release): %s' && git push --follow-tags "
  1. использовать использоватьgit czВы можете создавать автоматизированныеcommit messageиспользоватьnpm run changelogСоздайте журнал изменений, тег, версию обновления и автоматически выполните git push

проблема

Есть еще проблема, которая до сих пор не решена, то есть использоватьconventional-recommended-bumpЧтобы заменить рекомендуемую версию, проекты, которые я экспериментировал, только изменили номер версии в середине.Если ваш проект должен быть строгим с номером версии, рекомендуется использовать метод ручного изменения номера версии.