如何解决git服务器端钩子-预先接收或更新以检查Java的代码格式-如何使用它?
我正在尝试添加一个服务器端检查,该检查将从git push触发-检查提交的代码/差异是否正确格式化。 客户端存在代码格式化程序(Eclipse Code Formatter),这是最终检查。 到目前为止,我遇到的Pre-receive钩子和update钩子的例子很少。
#!/usr/bin/env bash
# Git update hook servers side,also doing and checking formatting of code
# check each branch being pushed
# Exit status 0 = all OK
# Exit status 1 = Problem,commit will be rejected
echo "update hook initiated"
# get different values (They are default - from update hook)
ref_name=$1
old_rev=$2
new_rev=$3
# only check branches,not tags or bare commits
#if [ -z $(echo $ref_name | grep "refs/heads/") ]; then
# exit 0
#fi
# don't check empty branches
if [ "$(expr "${new_rev}" : '0*$')" -ne 0 ]; then
exit 0
fi
仅执行此操作会失败:
remote: : Permission denied
remote: error: hook declined to update refs/heads/master
任何指针都很棒!
解决方法
该行:
remote: : Permission denied
很有启发性。注意此处的冒号,冒号,冒号模式。您的Git添加了remote:
,包括第一个冒号和空格,因此来自远程 (来自试图运行更新挂钩的服务器)的消息实际上是:>
: Permission denied
也就是说,该挂钩似乎正在运行没有字符的命令。通常,您会在这里得到command not found
;目前尚不清楚为什么会得到Permission denied
。在任何情况下,鉴于您显示的挂钩,这似乎都是不可能的。也许服务器正在运行不同的东西。但是,如果它正在运行bash脚本,请尝试添加-x
选项:
#! /usr/bin/env bash -x
,它将使您在执行时看到每一行,并使用空命令帮助查找该行。这是运行此类脚本的示例:
$ cat > /tmp/foo.bash
#! /usr/bin/env bash -x
""
$ chmod +x /tmp/foo.bash
$ /tmp/foo.bash
+ ''
/tmp/foo.bash: line 2: : command not found
$
+ ''
行显示了在第2行执行空命令的尝试,然后是详细的错误消息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。