5

我在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来检查所有推送的提交消息是否符合您的方案。

Chapter 8.3 (Customizing Git - Git Hooks) of Pro Git is an excellent resource. There are some quality walk-throughs there to help you. You can also take a look at the example files included in .git/hooks for your repository.

于 2012-07-04T10:18:10.733 回答