gpt4 book ai didi

git - 预提交中的 exit 1 不会中止 git commit?

转载 作者:行者123 更新时间:2023-12-04 02:20:45 25 4
gpt4 key购买 nike

如果满足特定条件,我将中止 git commit。

check if my commit has 'import pdb' in emacs/git?

#!/bin/sh

git diff --cached --no-renames --name-status --diff-filter=AM |
while read st file; do
case "$file" in
*.py)
if git show ":$file" |
grep -E "^[^#]*\bimport[[:space:]]+pdb\b"; then
echo "$file: has import pdb"
exit 1
fi;;
esac
done

git diff --cached --name-status --diff-filter=ACM | while read st file; do
if grep "#[[:space:]]*@test" "$file"; then
echo "$file: has @test"
exit 1
fi
done

代码运行正常,我可以看到日志“... has import pdb”但是下一行 exit 1 不会中止 git 提交。

它曾经工作得很好,但在某个时候停止工作了。我在 git 1.9.1


输出

$ GIT_TRACE=2 git commit
trace: built-in: git 'commit'
trace: run_command: '.git/hooks/pre-commit'
trace: built-in: git 'diff' '--cached' '--no-renames' '--name-status' '--diff-filter=AM'
trace: built-in: git 'show' ':momsite/apps/custom_push_notifications/utils.py'
import pdb; pdb.set_trace()
momsite/apps/custom_push_notifications/utils.py: has import pdb
trace: built-in: git 'diff' '--cached' '--name-status' '--diff-filter=ACM'
trace: run_command: 'emacs' '/home/eugenekim/Documents/zibann/.git/COMMIT_EDITMSG'
trace: exec: 'emacs' '/home/eugenekim/Documents/zibann/.git/COMMIT_EDITMSG'

最佳答案

代码的第一部分是这样的

something | while ...; do ... exit 1; done

由于管道必然涉及两个进程,因此 shell 必须派生一个子 shell 来执行您的 while 循环。结果,exit 1subshel​​l 以状态 1 存在,并返回到忽略返回代码的父 shell。

你想添加一个||在 done 关键字之后退出 $?,如下所示:

something | while ...; do ... exit 1; done || exit $?

请注意,这实际上不是 Git 问题,而是 shell 问题。

关于git - 预提交中的 exit 1 不会中止 git commit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29969093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com