我在myrepo/.git/hooks
中创建了一个commit-msg钩子。
#!/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
并尝试使用相同的消息再次提交。 提交成功。我想我可能在上面的步骤中做错了什么?
任何人都可以告诉我如何制作客户端钩子,并让每个开发人员从这个钩子中获得限制吗?
答案 0 :(得分: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
目录中创建符号链接,就像您一样。)
如果您真的想强迫开发人员受到限制,请查看server-side hooks。例如,您可以使用pre-receive
来检查所有推送的提交消息是否符合您的方案。
.git/hooks
中包含的示例文件。