paint-brush
Как автоматизировать рабочие процессы Git с помощью Git Hooks 🚀к@smy
145 чтения

Как автоматизировать рабочие процессы Git с помощью Git Hooks 🚀

к Syed Muhammad Yaseen4m2024/07/30
Read on Terminal Reader

Слишком долго; Читать

Перехватчики Git — это сценарии, которые запускаются автоматически всякий раз, когда в репозитории Git происходит определенное событие. Они позволяют вам настраивать внутреннее поведение Git и запускать настраиваемые действия в ключевые моменты жизненного цикла разработки. Например, вы хотите запустить проверку Lint перед фиксацией файлов, поэтому мы используем перехватчик предварительной фиксации.
featured image - Как автоматизировать рабочие процессы Git с помощью Git Hooks 🚀
Syed Muhammad Yaseen HackerNoon profile picture
0-item
1-item

Приветоооооо!


Надеюсь, у тебя все отлично! Это СМИ! 👋 Давайте сразу приступим 🚀


....

Я разработал пример хука commit-msg, который при каждом коммите


↳ проверяет соответствие названию ветки, т.е. [тип]/ABC-[номер билета]-[цель]


↳ проверяет соглашение commit-msg, т.е. [ABC-номер билета] [тип]: цель


↳ проверяет наличие линтов, красивее и запускает модульные тесты


Ссылка на суть: https://gist.github.com/smyaseen/17083d60d02a07b2a3122410e2d39b6f

.....

Содержание:

  • Wait What?
  • But Why?
  • ⚡Но But How?

1️⃣ Что -


↳ Перехватчики Git — это сценарии, которые запускаются автоматически всякий раз, когда в репозитории Git происходит определенное событие.


↳ Они позволяют настраивать внутреннее поведение Git и запускать настраиваемые действия в ключевые моменты жизненного цикла разработки.


↳ Существуют локальные перехватчики и перехватчики на стороне сервера.

↳ Локальные перехватчики работают на вашем компьютере и на стороне сервера в удаленном репозитории.


локальные крючки:


↳ предварительная фиксация ↳ подготовка-фиксация-сообщение ↳ фиксация-сообщение ↳ пост-фиксация ↳ после оформления заказа ↳ предварительная перезагрузка


серверные хуки:


↳ до получения ↳ обновление ↳ после получения


2️⃣ Почему -


↳ Например, вы хотите запустить проверку Lint перед фиксацией файлов, поэтому мы используем перехватчик предварительной фиксации.


↳ еще один пример: вы хотите обеспечить соблюдение стандартного имени ветки и соглашения commit-msg, поэтому мы используем перехватчик commit-msg.


↳ и многое другое...


3️⃣ Как -


↳ Для удобства настройки в проекте 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. Наконец, после того, как все остальное будет готово, он запустит тесты.

4️⃣ Результат -

✨ Последовательность.

✨Стандартизация.

✨ Не обращайте внимания на тривиальное.

✨ Автоматизируйте и сосредоточьтесь на эффективности.


Подведение итогов:


Мы только что улучшили ваш рабочий процесс разработки с помощью Git Hooks. 🚀


.....


Теперь вы можете ускорить свой рабочий процесс разработки 🚀


Вот и все, ребята! Я надеюсь, что это было хорошее чтение для вас. Спасибо! ✨


👉 Следуйте за мной на GitHub и LinkedIn.