Постоянно обновляемая заметка на github, адрес ссылки:Front-End-Basics, адрес этой статьи:Сделайте ваши коммиты более ценными.
спецификация фиксации
AngularJS вдокументация для разработчиковВ руководстве по git commit упоминается, что строгая спецификация формата git commit может отображать более удобочитаемую информацию в процессе просмотра истории проекта и может напрямую генерировать журнал изменений AngularJS с информацией о git commit.
спецификация формата сообщений фиксации
фиксировать сообщенияheader
,body
,footer
сочинение.
header
также содержитtype
,scope
,subject
.header
требуется, но один изscope
является необязательным.
body
а такжеfooter
Можно опустить.
<type>(<scope>): <subject>
// 空行
<BLANK LINE>
<body>
// 空行
<BLANK LINE>
<footer>
Примечание. Чтобы быть более понятным в github и различных инструментах git, каждая строка сообщения коммита не должна превышать 100 символов.
Header
Type
Тип должен быть одним из следующих:
- feat:новая функция
- fix:Исправлена ошибка
- docs:Только изменить документ
- style:Измененный формат (пробел, в форматировании пропущена точка с запятой), на работу кода не влияет
- refactor:Рефакторинг (ни исправление ошибок, ни добавление функций)
- build:Процесс сборки, изменения внешних зависимостей, такие как обновление пакетов npm, изменение конфигурации веб-пакета и т. д.
- perf:оптимизация производительности
- test:Тестовое задание
- chore:Изменения в процессе сборки или в вспомогательных средствах и библиотеках (например, создание документации)
- ci:изменения, связанные с ci
Кроме того, существует специальный типrevert, если текущая фиксация должна отменить предыдущую фиксацию, вы должны использоватьrevert
в начале, за которым следует отозванный коммитheader
,существуетbody
Следует указать:This reverts commit <hash>.
, hash относится к SHA фиксации, который будет отозван.
// 例如
revert: feat(user): add user type
This reverts commit ca16a365467e17915f0273392f4a13331b17617d.
Scope
Область может указывать область отправленных изменений, которая зависит от проекта.Если модификация затрагивает более одной области, она может быть указана как*
.
Subject
subject
Относится к краткому описанию изменения длиной менее 50 символов, как правило, в соответствии со следующими спецификациями:
- Начните с глагола, выраженного в настоящем времени от первого лица, например:
change
заменятьchanged
илиchanges
- первая буква строчная
- Не добавляйте точку (.) в конце
Body
body
Часть представляет собой подробное описание локального коммита, которое можно разделить на несколько строк.
а такжеsubject
Точно так же начните с глагола, выраженного в настоящем времени от первого лица, например:change
заменятьchanged
илиchanges
.
body
Следует указать причину модификации и сравнение поведения до и после изменения.
Footer
footer
В основном используется в этих двух ситуациях:
- Нарушение изменений, обычно используется
BREAKING CHANGE:
start, за которым следует пробел или два символа новой строки. Оставшаяся часть используется для объяснения информации и метода переноса этого изменения. - Закрыть выпуск,Пример проблемы с закрытием github
// BREAKING CHANGE: 的例子
BREAKING CHANGE: isolate scope bindings definition has changed and
the inject option for the directive controller injection was removed.
To migrate the code follow the example below:
Before:
scope: {
myAttr: 'attribute',
myBind: 'bind',
myExpression: 'expression',
myEval: 'evaluate',
myAccessor: 'accessor'
}
After:
scope: {
myAttr: '@',
myBind: '@',
myExpression: '&',
// myEval - usually not useful, but in cases where the expression is assignable, you can use '='
myAccessor: '=' // in directive's template change myAccessor() to myAccessor
}
The removed `inject` wasn't generaly useful for directives so there should be no code using it.
// Closes Issue 例子
Closes #2314, #3421
полный пример
Пример 1: подвиг
feat($browser): onUrlChange event (popstate/hashchange/polling)
Added new event to $browser:
- forward popstate event if available
- forward hashchange event if popstate not available
- do polling when neither popstate nor hashchange available
Breaks $browser.onHashChange, which was removed (use onUrlChange instead)
Пример 2: исправить
fix($compile): couple of unit tests for IE9
Older IEs serialize html uppercased, but IE9 does not...
Would be better to expect case insensitive, unfortunately jasmine does
not allow to user regexps for throw expectations.
Closes #392
Breaks foo.bar api, foo.baz should be used instead
Пример 3: стиль
style($location): add couple of missing semi colons
Посмотреть больше примеров
Преимущества стандартизации сообщений коммитов
- Первая линия - это краткая и практическая ключевая информация, которая удобна для быстрого просмотра в истории Git
- С подробным телом и нижним колонтитулом вы можете четко видеть цель и влияние фиксации
- Вы можете отфильтровать информацию, которую хотите найти, по типу или быстро найти похожие материалы по ключевым словам.
- Журнал изменений может быть сгенерирован непосредственно из коммита.
// 列举几个常用的 log 参数
// 输出 log 的首行
git log --pretty=oneline
// 只输出首行的 commit 信息。不包含 hash 和 合并信息等
git log --pretty=format:%s
// 查找有关“更新菜单配置项”的提交
git log --grep="更新菜单配置项"
// 打印出 chenfangxu 的提交
git log --author=chenfangxu
// 红色的短 hash,黄色的 ref , 绿色的相对时间
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'
Реализация отправки спецификаций с помощью инструментов
Формат стандартизированной отправки описан выше.Если студентов просят представитьgit commit
При написании в строгом соответствии с вышеизложенными спецификациями в первую очередь отягощается ум, и необходимо помнить, какие разные виды используются для определения,subject
как писать,body
как писать,footer
Хочешь пиши. Во-вторых, большинство норм для людей антигуманны, поэтому очень вероятно, что некоторые ученики будут постепенно не писать по нормам спустя долгое время. Полагаться на силу воли, чтобы контролировать себя, чтобы писать строго в соответствии со спецификацией, требует некоторой дополнительной энергии, и тратить энергию на такие вещи немного расточительно.
Один из них — запрашивать обязательные поля при отправке, а другой — проверять, соответствуют ли поля спецификациям после отправки. Оба они необходимы в практических проектах.
Commitizen
Сообщения коммитов в стиле дзен для граждан интернета Мммм~ что-то вроде дзен
Commitizen — это инструмент, помогающий писать канонические сообщения коммитов. у него есть инструмент командной строкиcz-cli, в следующем разделе будет представлено несколько этапов использования Commitizen.
опыт git cz
// 全局安装 Commitizen
npm install -g commitizen
Ваш репозиторий может еще не быть уверенным, в этот моментgit cz
эффектgit commit
То же самое, то есть никакого эффекта. Однако возможно выполнениеnpx git-cz
испытать.
Если вы хотите запустить напрямуюgit cz
Реализовать семантическое подчинение, которое может быть основано наstreamich/git-czДокумент говорит глобальная установкаgit cz
.
// 全局安装 git cz
npm install -g git-cz
В дополнение к этому есть более рекомендуемый способ — сделать ваш репозиторий дружественным к Commitizen.
дружественный к Commitizen
После глобальной установки Commitize инициализируйте свой проект с помощью адаптера cz-conventional-changelog.
// 初始化 cz-conventional-changelog 适配器
commitizen init cz-conventional-changelog --save-dev --save-exact
Приведенная выше инициализация делает три вещи:
- Установите зависимости cz-conventional-changelog
- Сохранить зависимость package.json
dependencies
илиdevDependencies
середина - В корневом каталоге package.json добавьте следующее
config.commitizen
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
}
Или создайте новый файл .czrc в корневом каталоге проекта с содержимым, установленным на
{
"path": "cz-conventional-changelog"
}
беги сейчасgit cz
Эффект следующий:
cz-настраиваемая пользовательская китайская конфигурация
Вы можете видеть на скриншоте выше, параметры конфигурации представлены на английском языке, если вы хотите изменить китайский, вы можете использоватьcz-customizableадаптер.
Выполните следующую команду,Обратите внимание, что он был инициализирован однажды, и на этот раз для инициализации вам нужно добавить--force
покрытие
npm install cz-customizable --save-dev
commitizen init cz-customizable --save-dev --save-exact --force
Теперь в package.jsonconfig.commitizen
Поля:
"config": {
"commitizen": {
"path": "./node_modules/cz-customizable"
}
}
Есть три способа найти конфигурационные файлы в документе cz-customizable: согласно первому, мы создаем его в корневом каталоге проекта..cz-config.js
документ. по приведенному примеруcz-config-EXAMPLE.jsПишем наш конфиг. тип фиксации может относиться кconventional-commit-types.
Вы можете нажать, чтобы просмотреть мои настроенные файлыqiqihaobenben/commitizen-git/.cz-config.jsПодробные замечания.
Проверка проверки
Как указано в документации Commitizen, Commitize может запускатьgit commit
Подсказка может быть дана перед хуком, но также полезно дать понять, что проверка сообщений коммита при коммите тоже полезна. В конце концов, даже если Commitzen используется, его можно обойти, поэтому очень важно представить окончательную проверку.
commitlintВы можете проверить, соответствуют ли сообщения фиксации стандартному формату фиксации. Требуется конфигурация проверки. Рекомендуется.@commitlint/config-conventional.
npm i --save-dev @commitlint/config-conventional @commitlint/cli
Создайте файл commitlint.config.js в корневом каталоге проекта и установите правила проверки:
module.exports = {
extends: ["@commitlint/config-conventional"],
// rules 里面可以设置一些自定义的校验规则
rules: {},
};
Установите husky в проект и создайте новый файл husky.config.js в корневом каталоге проекта, добавив следующие настройки:
// 安装 husky
npm install --save-dev husky
// husky.config.js 中加入以下代码
module.exports = {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
Примечание: потому что@commitlint/config-conventionalПравила проверки соответствуют спецификации Angular, поэтому, когда мы используем cz-customizable для настройки китайской конфигурации, мы следуем данному примеру, который соответствует спецификации Angular.cz-config-EXAMPLE.jsзаписывать
.cz-config.js
из. Но если ваша пользовательская конфигурация Commitizen не соответствует спецификации Angular, вы можете использоватьcommitlint-config-czУстановите правила проверки. (Рекомендуется выполнять настраиваемую конфигурацию cz в соответствии со спецификацией Angular)
// 安装 commitlint-config-cz
npm install commitlint-config-cz --save-dev
// commitlint.config.js 改为
module.exports = {
extends: [
'cz'
]
};
git commit запускает git cz
При подаче мы все привыклиgit commit
, хотя заменен наgit cz
Не сложно, но если вы позволите разработчикамgit commit
нечувствительный триггерgit cz
конечно лучше,
И это также может избегать людей, которые не знакомы с проектом напрямую.git commit
Отправьте некоторую несоответствующую информацию.
Мы можем установить в husky.config.js:
"hooks": {
"prepare-commit-msg": "exec < /dev/tty && git cz --hook || true",
}
Примечание. В оконной системе может потребоваться, чтобы он находился в базе git, чтобы он вступил в силу.
Создать журнал изменений
standard-versionэто использованиеsemverа такжеconventional-commitsУтилита, поддерживающая создание CHANGELOG для контроля версий. standard-version может не только генерировать CHANGELOG, но и выполнять контроль версий в соответствии с типом коммита.
// 安装 standard-verison
npm i --save-dev standard-version
// 在 package.json 中的 scripts 加入 standard-version
{
"scripts": {
"release": "standard-version"
}
}
пример проекта
может просматриватьcommitizen-git, в котором кратко изложены шаги по быстрой настройке хранилища, удобного для Commitizen. Почти тридцать пять минут можно застегнуть.
После того, как конфигурация может посмотреть, реализация результатов GIT Commit.
расширять
Более сложные пользовательские подсказки
cz-customizableЭлементов пользовательской конфигурации обычно достаточно, Правил проверки в commitlint в основном достаточно, но некоторым хардкорным разработчикам будет казаться, что этого недостаточно, и даже больше. Например, некоторые подсказки более персонализированы, Вопрос, заданный при отправке, добавляет больше логики, например, вы можете передать некоторые важные проверки полей в Commitizen или добавить дополнительные пользовательские проверки.
Если вы действительно хотите это сделать, сделайте копиюcz-conventional-changelogилиcz-customizableизменить, Или написать адаптер самостоятельно.
Дружественный значок Commitizen
Если репозиторий настроен как дружественный к Commitizen, его можно найти вREADME.md
Добавьте этот маленький значок в: