理想的には、サンプルファイルに従っている場合、フックはbashで記述されます。ただし、使用可能な任意の言語で記述でき、実行可能フラグが付いていることを確認してください。
したがって、PythonまたはGoコードを記述して目標を達成し、フックフォルダーの下に配置できます。動作しますが、リポジトリと一緒に管理されません。
2つのオプション
a)マルチスクリプト
ヘルプ内にフックをコーディングし、コードの小さなフラグメントをフックに追加して、次のような完璧なスクリプトを呼び出すことができます。
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/myprecommit.js
b)単一のスクリプト
クールなオプションは、複数のスクリプトではなく、1つだけスクリプトを追加してそれらすべてをルール化することです。したがって、hooks / mysuperhook.goを作成して、必要なすべてのフックをポイントします。
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/mysuperhook.go $(basename $0)
パラメータは、どのフックがトリガーされたかをスクリプトに提供し、コード内で区別することができます。どうして?たとえば、コミットとプッシュに対して同じチェックを実行したい場合があります。
その後?
次に、次のような機能を追加することができます。
- フックを手動でトリガーして、コミットまたはプッシュの前であっても問題がないかどうかを確認します。スクリプト(オプションaまたはb)を呼び出すだけでうまくいくでしょう。
- CIのフックをトリガーするので、CIの同じチェックを書き直す必要はありません。たとえば、コミットトリガーとプッシュトリガーを呼び出すだけです。上記と同じようにそれを解決する必要があります。
- マークダウンバリデーターやYAMLバリデーターなどの外部ツールを呼び出します。syscallを作成でき、STDOUTとSTDERRを処理する必要があります。
- すべての開発者がフックをインストールする簡単な方法を持っていることを確認してください。デフォルトのフックを正しいフックに置き換えるには、素敵なスクリプトをリポジトリに追加する必要があります。
- ブランチを開発およびマスターするためのコミットをブロックするチェックのように、すべてのリポジトリに追加する必要がないグローバルヘルパーを用意します。グローバルスクリプトを含む別のリポジトリを用意することで解決できます。
これはもっと簡単ですか?
はい、git-hooksの管理に役立つツールがいくつかあります。それらのそれぞれは、異なる視点から問題に取り組むように調整されており、あなたやあなたのチームに最適なものを得るためにそれらすべてを理解する必要があるかもしれません。GitHooks.comは、フッキングに関する多くのと、今日入手可能ないくつかのツールが用意されています。
今日の時点で、gitフックを管理するためのさまざまな戦略を持つ21のプロジェクトがリストされています。単一のフックに対してのみ実行するものもあれば、特定の言語に対して実行するものもあります。
私が作成し、オープンソースプロジェクトとして無料で提供されているツールの1つは、hooks4gitと呼ばれています。。これはPythonで書かれていますが(私が気に入っているため)、上記のすべての項目を.hooks4git.iniという単一の構成ファイルで処理することをお勧めします。 。
gitフックを使用することは本当に素晴らしいですが、それらが提供される方法は通常、人々をそこから遠ざけるだけです。