gitフックでワークフローを自動化する

クレジット:Atlass

gitフックとは

Gitフックは、コミット、プッシュ、リベースなどの特定のイベントの前に実行されるスクリプトです。これらはイベントベースであるため、特定のgitコマンドを実行すると、gitはgitリポジトリ内のフックをチェックして、関連するスクリプトがあるかどうかを確認します走る。フックは.git / hooksディレクトリにあります。

cd .git / hooks

そのディレクトリ内のファイルをリストすると、次のサンプルフックが表示されます。

1. applypatch-msg.sample
2. commit-msg.sample
3. post-update.sample
4. pre-applypatch.sample
5. pre-commit.sample
6. pre-push.sample
7. pre-rebase.sample
8. pre-recieve.sample
9. prepare-commit-msg.sample
10.update.sample

それらを使用してgitワークフローを改善する方法

あなたがこれまでに多くの貢献者とオープンソースプロジェクトに取り組んだことがある場合、またはおそらくあなたがプロジェクトの技術チームリーダーであり、開発者が特定のワークフローエラーになるような方法でチームのgitワークフローを改善する方法を探している場合コミットされる前に回避される傾向があります。おそらく、あなたは常に100のAゲームを常に持っているのが好きな開発者であり、おそらく今はgitフックを探索する良い機会です。

この記事では、コードをリモートブランチにプッシュする前に、事前プッシュgitフックを使用してテストを実行する方法を示します。この投稿では、PHPを使用します。

Macブックを使用している場合は、それに従ってください。 Windows PCを使用している場合、シェルコマンドは異なります。この記事では、Windowsコマンドは提供していません。

このリポジトリを複製します。 Laravelでビルドされたプロジェクトと、PHPUnitで記述されたいくつかの単体テストが含まれています。クローンを作成してセットアップしたら、ディレクトリをgit hooksディレクトリに変更し、事前プッシュファイルを作成します。お気に入りのテキストエディターでこれを開き、Atomを使用します。

cd .git / hooks
プレプッシュをタッチ
atom pre-push //任意のテキストエディターでこのファイルを開きます

理想的には、リモートブランチにコードをプッシュする前にテストを実行できるようにします。フックスクリプトが0で終了する場合、すべてが正常であり、gitは引き続きリモートブランチにコードをプッシュします。ゼロ以外のコードで終了すると、gitは操作を停止します。

7行目:
exec関数は、この場合、vendor / bin / phpunitであるテストを実行するコマンドをトリガーします。

codeceptionなどの他のテストフレームワークを使用している場合、vendor / bin / phpunitを特定のコマンドに置き換えて、選択したフレームワークでテストを実行する必要があります。出力変数の内容は、コマンドからの出力のすべての行が入力された配列になります。

9行目:
終了コードが0でない場合、テストは正常に実行されませんでした。出力変数の内容を調べて、配列のどの項目を端末に表示するかを決定できます。インデックス14にアイテムを表示し、テスト、合格、失敗の概要を示しています。この部分は本当にあなた次第です。ターミナルで好きなものを出力できます。要するに、gitは停止し、プッシュイベントは発生しません。

18行目:
ゼロの終了コードは、すべて緑であることを意味します。 Gitはリモートブランチへのプッシュイベントを続行します。

次は何?

事前プッシュファイルを実行可能にして、フックとして機能させます。

chmod a + x事前プッシュ

次に、プロジェクト内のファイルのいずれかに小さな変更を加え、変更されたファイルをステージングします。コードを微調整して失敗をトリガーすることができます。そうすることで、フックがすぐに動作することを確認できます。

ga。 && gc -m「小さな変更」
git push origin the-branch-you-are-on

障害がある場合は、端末に次のようなものが表示されます。

これの利点は何ですか?

1.プッシュする前にテストコマンドを実行するのを忘れたとしましょう。これにより、github / bitbucket / gitlabでビルドが失敗したときに直面する可能性のある恥ずかしさがなくなります。
2.プッシュする前に常に手動でテストを実行するのは繰り返しのタスクですが、繰り返しのタスクで何をしますか?私もそう思いました!さらに、生産性が向上します。
3.テストの実行にかかった合計時間を計算するなど、本当にクールなことができます。そうすれば、テストの実行に時間がかかりすぎたかどうかをすぐに知ることができます。本当にあなた次第です。

さまざまなgitフックの他のユースケースを自由に検討してください。 Gitフックは、ワークフローを自動化する興味深いツールです。以下のコメントセクションであなたの考えを共有してください。

この投稿は役に立ちましたか?いくつかの愛と共有を親切に示してください。