假设在每个文件上执行的脚本不能设置为在一个参数上失败时立即失败,则不能使用该xargs设置。你可以这样做:
#!/bin/bash
# for a pre-commit hook, use --cached instead of HEAD^ HEAD
IFS=$'\n'
git diff --name-only HEAD^ HEAD | grep '\.php$' |
while read file; do
# exit immediately if the script fails
my_script "$file" || exit $?
done
但也许
phpmd
你已经准备好了吗?无法完全理解您的问题,但如果确实如此,您所要做的就是确保它是钩子中的最后一个命令。管道的出口状态是管道中最后一个命令的出口状态。(
PHPMD
,shell脚本的退出状态是它运行的最后一个命令的退出状态—所以如果
PHPMD
退出并返回错误状态,钩子脚本将,如果是预提交钩子,这将导致Git中止提交。
至于git-commit控制这个钩子调用的选项,除非考虑到
--no-verify
(它抑制了所有提交钩子)足够好了。别名…最干净的方法是在别名中设置一个环境变量,可能是:
# gitconfig
[alias]
commitx = "!run_my_hook=1; git commit"
# your script
#!/bin/bash
# if the variable's empty, exit immediately
if [ -z "$run_my_hook" ]; then
exit 0;
fi
# rest of script here...