адрес проекта: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
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
, создать экологическую
- conventional-changelog-cl: Генерируется путем фиксации записейCHANGELOG.md
- conventional-github-releaser: Создать описание изменения в выпуске github из записи коммита.
- conventional-recommended-bump: определите, какой номер версии Semantic Versioning необходимо обновить в соответствии с записью отправки.
Используйте эти инструменты, чтобы упростить процесс публикации.
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
- Установить зависимости
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
- существует
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 "
- использовать
использовать
git cz
Вы можете создавать автоматизированныеcommit message
использоватьnpm run changelog
Создайте журнал изменений, тег, версию обновления и автоматически выполните git push
проблема
Есть еще проблема, которая до сих пор не решена, то есть использоватьconventional-recommended-bump
Чтобы заменить рекомендуемую версию, проекты, которые я экспериментировал, только изменили номер версии в середине.Если ваш проект должен быть строгим с номером версии, рекомендуется использовать метод ручного изменения номера версии.