リポジトリをクリーンで整頓された状態に保つために、gitcommitメッセージポリシーを適用しようとしています。サーバー側とクライアント側のフックに関する公式ドキュメントを見た後、 ハスキー にぶつかりました。
これまでのところ、最初のもので作業することはできましたが、ハスキーを設定することはできませんでした。まだ学ぶことがたくさんあります。主なアイデアは、クライアント側のフックを手動で設定しなくても、新しいワークステーションで作業できるようにすることです。
誰かが私のコミットメッセージをチェックしたり、例を作ったりするためにハスキーを設定する方法を説明できますか?
これはproject-root/githooks
フォルダーにある私のcommit-msgフックです。
#!/usr/bin/env Ruby
message_file = ARGV[0]
message = File.read(message_file)
$regex = /([resolved|fixed]) #([0-9])* ([A-Z])\w+/
if !$regex.match(message)
puts "[POLICY] Your message is not formatted correctly!"
puts "Message format must be like:"
puts "resolved #123 Case title (for features)"
puts "fixed #123 Case title (for bugs)"
puts "First letter of 'Case title' must be capitalized!"
exit 1
end
Package.jsonにスクリプトを追加しようとしました:
"scripts": {
... : ...,
"commitmsg": "sh hooks/commit-msg",
... : ...
}
フックが機能しません。すべてのメッセージが合格します。 .git/hooksに入れると、正常に動作します。
これは、package.json、commit-msgフック、およびそれが出力するエラーを含むテストプロジェクトのスクリーンショットです。
.git/hooksフォルダーに配置された同じフックは、問題なく機能します。
問題81 を参照してください
まず、確認してください
npm config get ignore-scripts # should be false
次に、gitリポジトリで:
npm install husky --save-dev
次に、フック(ここではpre-commitとpre-Push)をnpm(package.json
)に追加できます。これらのフック定義は、そのpackage.json
ファイル(gitリポジトリソースの一部)のバージョンです。
既存の通常のbashフックを宣言することもできます( issue 92 )
{
"scripts": {
"precommit": "sh scripts/my-specific-hook.sh"
}
}
次に、 validate-commit-msg
を使用してコミットメッセージを検証できます。
"commitmsg": "validate-commit-msg"
のnpmスクリプトにpackage.json
を追加します。
このように:
まず、ハスキー構成に検証スクリプトを追加します。
// package.json
{
...
"husky": {
"hooks": {
"pre-commit": "npm test",
// if you use validate-commit-msg, this can be "validate-commit-msg"
+ "commit-msg": "sh scripts/my-specific-hook.sh",
....
}
}
}
そして、試してみてください...
すべてが大丈夫のようです。