Пишем коммиты как профессионалы
Создание эффективных коммитов — отличительная черта опытных разработчиков. Принятие спецификации «Conventional Commits» (Соглашение о коммитах) служит маяком для структурирования коммитов.
Это не просто руководство, это путь к более четкой истории коммитов, которая гармонично сочетается с семантическим версионированием (SemVer).
Что такое «Соглашение о коммитах»?
«Conventional Commits» предлагает легкую, но мощную структуру для организации коммитов. Классифицируя изменения по отдельным типам, таким как фичи, исправления и другие, они устанавливают золотой стандарт ясности и последовательности и соответствуют семантическому версионированию.
Зачем использовать «Соглашение о коммитах»
- Автоматическое создание списков изменения.
- Автоматическое определение семантического повышения версии (на основе типов совершённых коммитов).
- Информирование товарищей по команде, общественности и других заинтересованных сторон о характере изменений.
- Запуск процессов сборки и публикации.
- Упрощать людям участие в ваших проектах, позволив им изучить более структурированную историю коммитов.
Анатомия «Соглашения о коммитах»
При создании коммитов, пожалуйста, используйте простой формат, который обычно выглядит так: <тип>: <описание>
.
Полн коммит должно иметь следующую структуру:
<type>[необязательный scope]: <description>
[необязательное body]
[необязательный footer]
type
: Тип коммитаscope
: Краткое описание участка кодовой базы, заключенное в круглые скобки, за которыми следуют двоеточие и пробел. Сообщения, как правило, в настоящем времени и императивеdescription
: Краткое описание изменений в кодеbody
: Более длинное описание коммита, предоставляющее дополнительный контекст изменений. Должно быть помещено на одну пустую строку после описания.footer
:
Сноски должны содержать только ссылки на дополнительные вопросы, касающиеся изменений.
Примеры
Коммит, который я сделал, чтобы решить проблему:
feat(homepage): Add carousel feature to showcase testimonials
Implemented a carousel component on the homepage
Added client testimonials section for improved user engagement
Fixes #12
Больше примеров:
- feat: Add new rating component
- fix: Resolve issue with city search feature
- docs: Update README with new contribution guidelines
Типы коммитов
В дополнение к классическим fix
и feat
у нас есть целый букет типов коммитов. Это как выбор начинки для вашей пиццы с коммитами:
build
: Изменения, связанные с процессами или инструментами сборки.chore
: Регулярное обслуживание или административные задачи.ci
: Обновления в настройках непрерывной интеграции.docs
: Изменения, связанные с документацией.style
: Изменения, которые не влияют на функциональность кода (например, форматирование кода).refactor
: Модификация кода без изменения его поведения (рефакторинг).perf
: Улучшение производительности.test
: Добавление или изменение тестов.
Вы можете использовать эти типы для категоризации коммитов в соответствии с их характером. Это помогает поддерживать последовательность в сообщениях и лучше организовать изменения в истории проекта.
Готовые решения для IDE
PhpStorm
Для IDE PhpStorm от JetBrains есть готовое решение в виде плагина «Conventional Commit«, целью которого является обеспечение автокомплита для «Соглашений о коммитах», также называемых семантическими коммитами, в диалоге VCS Commit.
Что умеет плагин
- Стандартное завершение — на основе контекста
- Шаблонное завершение — инициируется ручками
- Предлагает определённый уровень кастомизации для использования персонализированных и разделяемых токенов по умолчанию, а также прикрепление дополнительных провайдеров для различных частей коммита: type, scope, subject, body, footer type и footer.
VSCode
Для популярного бесплатного редактора VSCode тоже имеется решение в виде расширения «Conventional Commits«
Что умеет расширение
Это расширение поможет вам заполнить сообщение коммита в соответствии со спецификацией «Соглашения о коммитах».
- Поддерживает конфигурации commitlint
- Поддержка автокоммита и push после ввода сообщений
- Поддержка управления scope на уровне проекта.
- Поддержка gitmojis.
- Поддержка рабочих пространств VSCode.