Приветоооооо!
Надеюсь, у тебя все отлично! Это СМИ! 👋 Давайте сразу приступим 🚀
....
Я разработал пример хука commit-msg, который при каждом коммите
↳ проверяет соответствие названию ветки, т.е. [тип]/ABC-[номер билета]-[цель]
↳ проверяет соглашение commit-msg, т.е. [ABC-номер билета] [тип]: цель
↳ проверяет наличие линтов, красивее и запускает модульные тесты
Ссылка на суть: https://gist.github.com/smyaseen/17083d60d02a07b2a3122410e2d39b6f
.....
Wait What?
But Why?
But How?
↳ Перехватчики Git — это сценарии, которые запускаются автоматически всякий раз, когда в репозитории Git происходит определенное событие.
↳ Они позволяют настраивать внутреннее поведение Git и запускать настраиваемые действия в ключевые моменты жизненного цикла разработки.
↳ Существуют локальные перехватчики и перехватчики на стороне сервера.
↳ Локальные перехватчики работают на вашем компьютере и на стороне сервера в удаленном репозитории.
локальные крючки:
↳ предварительная фиксация ↳ подготовка-фиксация-сообщение ↳ фиксация-сообщение ↳ пост-фиксация ↳ после оформления заказа ↳ предварительная перезагрузка
серверные хуки:
↳ до получения ↳ обновление ↳ после получения
↳ Например, вы хотите запустить проверку Lint перед фиксацией файлов, поэтому мы используем перехватчик предварительной фиксации.
↳ еще один пример: вы хотите обеспечить соблюдение стандартного имени ветки и соглашения commit-msg, поэтому мы используем перехватчик commit-msg.
↳ и многое другое...
↳ Для удобства настройки в проекте JavaScript установите библиотеку Husky и следуйте документации.
https://www.npmjs.com/package/husky
↳ Пример: я хочу обеспечить соблюдение имен ветвей, соглашение о сообщениях фиксации и запустить lint, prettier и тесты.
↳ Мы можем использовать несколько хуков. В моем случае я добавлю крючок commit-msg. Причина, по которой я не выбрал предварительную фиксацию, заключалась в том, что она не проверяет наличие commit-msg при запуске перед фиксацией. Я не хочу, чтобы разработчик запускал проверки и терпел неудачу при сообщении о фиксации, исправлял и запускал все снова. Я хочу сначала проверить сообщение о фиксации.
↳ Создайте перехватчик commit-msg, следуя документации Husky, и вставьте следующий пример:
#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" # Checks for branch name currentBranch=$(git rev-parse --abbrev-ref HEAD) requiredPattern="^(build|chore|feat|docs|refactor|perf|test)/ABC-\d+-.+$" if ! echo "$currentBranch" | grep -qE $requiredPattern; then echo "\nInvalid branch name: $currentBranch" echo "-" echo "Should follow this pattern: build|chore|feat|docs|refactor|perf|test/ABC-ticketnumber-any-text" echo "-" echo "example: docs/ABC-123-update-readme.md" echo "-" echo "Refer to this for convention:" echo "-" echo "build : Changes related to building the code (eg adding npm dependencies or external libraries)." echo "-" echo "chore: Changes that do not affect the external user (eg updating the .gitignore file or .prettierrc file)." echo "-" echo "feat: A new feature." echo "-" echo "fix: A bug fix." echo "-" echo "docs: Documentation a related changes." echo "-" echo "refactor: A code that neither fix bug nor adds a feature." echo "-" echo "perf: A code that improves performance style: A code that is related to styling." echo "-" echo "test: Adding new test or making changes to existing test" echo "-\n" exit 1 # Branch name doesn't match the pattern, exit with error code fi # Checks for commit message commit_message="$(cat "$1")" pattern='^\[ABC-[0-9]+\] (build|chore|feat|docs|refactor|perf|test): .+$' if [[ ! $commit_message =~ $pattern ]]; then echo "\nInvalid commit message: $commit_message" echo "-" echo "Should follow this pattern: [ABC-ticketnumber] build|chore|feat|docs|refactor|perf|test: objective" echo "-" echo "example: [ABC-15] chore: updated .gitignore" echo "-" echo "Refer to this for convention:" echo "-" echo "build : Changes related to building the code (eg adding npm dependencies or external libraries)." echo "-" echo "chore: Changes that do not affect the external user (eg updating the .gitignore file or .prettierrc file)." echo "-" echo "feat: A new feature." echo "-" echo "fix: A bug fix." echo "-" echo "docs: Documentation a related changes." echo "-" echo "refactor: A code that neither fix bug nor adds a feature." echo "-" echo "perf: A code that improves performance style: A code that is related to styling." echo "-" echo "test: Adding new test or making changes to existing test" echo "-\n" exit 1 fi # npx lint-staged -- uncomment when have lint setted up # npm run test -- uncomment when have test setted up
↳ Теперь при каждом коммите будет проверяться соглашение об именах ветвей и коммитов, а также выполняться проверка lint. Наконец, после того, как все остальное будет готово, он запустит тесты.
✨ Последовательность.
✨Стандартизация.
✨ Не обращайте внимания на тривиальное.
✨ Автоматизируйте и сосредоточьтесь на эффективности.
Мы только что улучшили ваш рабочий процесс разработки с помощью Git Hooks. 🚀
.....
Теперь вы можете ускорить свой рабочий процесс разработки 🚀
Вот и все, ребята! Я надеюсь, что это было хорошее чтение для вас. Спасибо! ✨