使用exit在pre-commit hook中停止git commit

时间:2015-06-03 01:45:23

标签: macos git bash githooks pre-commit-hook

我试图阻止git提交继续使用预提交挂钩。从阅读手册开始,它应该在你返回0以外的退出代码时停止。我正在测试以查看csscomb命令是否返回错误,如果是,则打破循环并退出,但git commit仍然继续通过fatal: [192.168.99.135] => {'msg': "AnsibleError: file: roles/basho_bench/templates/http_fix_1min.conf.template.j2, line number: 24, error: expected token 'end of print statement', got 'Content'", 'failed': True} fatal: [192.168.99.135] => {'msg': 'One or more items failed.', 'failed': True, 'changed': False, 'results': [{'msg': "AnsibleError: file: roles/basho_bench/templates/http_fix_1min.conf.template.j2, line number: 24, error: expected token 'end of print statement', got 'Content'", 'failed': True}]} 输入消息。

我已经从https://github.com/filtercake/git-pre-commit-csscomb

分叉并修改了以下脚本
git commit (-a)

1 个答案:

答案 0 :(得分:2)

            git diff-index --cached --full-index --diff-filter=ACM $against | \
            {
                while read -r line; do

这是你的麻烦。多命令管道阶段在子shell中运行,并且该循环的退出退出其子shell。子shell也有自己的环境,因此您无法从它们传递变量设置。

while read -r; do
        if ! good $REPLY; then exit 1; fi
done <<EOD
$(git diff-index --cached --full-index --diff-filter=ACM $against)
EOD