paint-brush
Git フックを使用して Git ワークフローを自動化する方法 🚀@smy
新しい歴史

Git フックを使用して Git ワークフローを自動化する方法 🚀

Syed Muhammad Yaseen4m2024/07/30
Read on Terminal Reader

長すぎる; 読むには

Git フックは、Git リポジトリで特定のイベントが発生するたびに自動的に実行されるスクリプトです。これにより、Git の内部動作をカスタマイズし、開発ライフサイクルの重要なポイントでカスタマイズ可能なアクションをトリガーできます。たとえば、ファイルがコミットされる前に Lint チェックを実行する場合は、pre-commit フックを使用します。
featured image - Git フックを使用して Git ワークフローを自動化する方法 🚀
Syed Muhammad Yaseen HackerNoon profile picture
0-item
1-item

こんにちは〜〜!


元気でいらっしゃいますか?SMY です!👋 早速始めましょう🚀


....

私は、コミットごとにコミットメッセージフックの例を設定しました


↳ ブランチ名の規則をチェックします。つまり、[type]/ABC-[ticketnumber]-[objective]


↳ commit-msg 規約をチェックします。つまり [ABC-ticketnumber] [type]: objective


↳ lints、prettier をチェックし、ユニットテストを実行します


要点リンク: https://gist.github.com/smyaseen/17083d60d02a07b2a3122410e2d39b6f

.....

コンテンツ:

  • Wait What?
  • But Why?
  • But How?

1️⃣ 何 -


↳ Git フックは、Git リポジトリで特定のイベントが発生するたびに自動的に実行されるスクリプトです。


↳ Git の内部動作をカスタマイズし、開発ライフサイクルの重要なポイントでカスタマイズ可能なアクションをトリガーできます。


↳ ローカルフックとサーバー側フックがあります。

↳ ローカルフックは、自分のマシン上で実行され、リモートリポジトリのサーバー側では実行されます。


ローカルフック:


↳ コミット前 ↳ コミットメッセージ準備 ↳ コミットメッセージ ↳ コミット後 ↳ チェックアウト後 ↳ リベース前


サーバーフック:


↳ 事前受信 ↳ 更新 ↳ 事後受信


2️⃣ なぜ -


↳ たとえば、ファイルがコミットされる前に Lint チェックを実行したい場合は、pre-commit フックを使用します。


↳ 別の例では、標準のブランチ名と commit-msg 規則を強制したいので、commit-msg フックを使用します。


↳ その他多数...


3️⃣ 方法 -


↳ 簡単にセットアップするには、JavaScriptプロジェクトでHuskyというライブラリをインストールし、ドキュメントに従ってください。

https://www.npmjs.com/package/husky


↳ たとえば、ブランチ名、コミットメッセージの規則を強制し、lint、prettier、テストを実行したいとします。


↳ 複数のフックを使用できます。私の場合は、commit-msg フックを追加します。pre-commit を選択しなかった理由は、コミット前に実行されるため、commit-msg をチェックしないからです。開発者がチェックを実行してコミット メッセージで失敗し、修正してすべてを再度実行することは望ましくありません。最初にコミット メッセージをチェックしたいのです。


↳ Husky のドキュメントに従って commit-msg フックを作成し、次の例を貼り付けます。


 #!/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 フックで開発ワークフローを向上させました。🚀


.....


開発ワークフローを強化できるようになりました🚀


以上です。皆さん、良い読み物になったことを願っています。ありがとうございました!✨


👉 GitHubLinkedInでフォローしてください