5

で commit-msg フックを作成しmyrepo/.git/hooksます。

#!/bin/sh
message=`cat $1`
c=`echo $message|grep -c 'fff'`
if[ $c -gt 0 ];then
  echo "Error"
  exit 1
fi
exit 0

そのようにコミットしようとすると、エラーが発生してコミットがブロックされます。

$ git commit -m "reffrffffeffff fffeef"
Error

次に、次のことを行います。

$ cd myrepo
$ mkdir .hooks
$ mv .git/hooks/commit-msg .hooks/commit-msg
$ ln -s .hooks/commit-msg .git/hooks/commit-msg

同じメッセージで再度コミットしてみてください。コミットは成功します。上記の手順で何か間違ったことをしたのではないでしょうか?

クライアント側のフックを作成する方法と、各開発者がこのフックから制限を受ける方法を誰か教えてもらえますか?

4

1 に答える 1

6

あなたのステップの問題:

不適切なシンボリック リンクを作成しました。シンボリック リンクはcommit-msgを指し.git/hooks/.hooks/commit-msgます。代わりに、これを試してください:

$ cd myrepo
$ mkdir .hooks
$ cd .git/hooks
$ mv commit-msg ../../.hooks/commit-msg
$ ln -s !$ commit-msg  # lazy: '!$' expands to '../../.hooks/commit-msg'

各開発者のコ​​ミット メッセージを制限する方法

ご存じのとおり、commit-msgフックはクライアント側のフックです。各開発者のコ​​ミット メッセージが何らかのスキームに従っていない場合に拒否されるようにするには、開発者にフック自体をインストールしてもらう必要があります。フックをリポジトリの一部として維持することはできませんが、別の Git リポジトリに保持することはオプションです。(明確にするために、それらをリポジトリに保持することもできますが、開発者はディレクトリにシンボリックリンクを作成する必要があり.git/hooksます)。

開発者をフックによって制限することを本当に強制したい場合は、サーバー側のフックを調べてください。pre-receiveたとえば、 を使用して、プッシュされたすべてのコミット メッセージがスキームに従っていることを確認できます。

Pro Git の第 8.3 章 (Git のカスタマイズ - Git フック)は優れたリソースです。あなたを助けるためにそこにいくつかの質の高いウォークスルーがあります. .git/hooksリポジトリ用に含まれているサンプル ファイルを確認することもできます。

于 2012-07-04T10:18:10.733 に答える