如何在 Git 上获取 Python 退出代码 Windows 与 git 挂钩 Windows

How to get Python Exit code in a Git Hook on Windows with git for Windows

我在我的预推送 git 挂钩中添加了一个 Python 脚本调用,它执行我的单元测试。

如果我不使用 Git LFS,这很好用。但是,如果我使用 Git LFS,这将不起作用,因为我必须区分我的测试是否失败。如果它们失败了,我不想推送实际代码,否则我会使用 Git LFS 命令推送它们。

下面的钩子是我的起点。从这一点开始,我想使用 IF 语句来决定是否执行 Git LFS 命令。

#!/bin/sh
python .git/hooks/pre-push.py
command -v git-lfs >/dev/null 2>&1 || { echo >&2 "\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting .git/hooks/pre-push.\n"; exit 2; }
git lfs pre-push "$@"

以下代码片段显示了我如何在测试失败时退出 Python。

errno = pytest.main(["-v", "-m", "not device_test"])
if(errno == ExitCode.TESTS_FAILED):
    print("Pytests failed!")
    sys.exit(1)

问题是我无法使用 $? (就像在几个地方建议的那样)。

知道如何获取退出代码吗?

当然,解决方法是使用 git 挂钩,Git LFS 不使用该挂钩,例如预提交。但是,我想在推送之前执行单元测试。

在您的脚本顶部添加一行,紧跟在 shebang (#!) 之后:

set -e

这使得 shell 检查每个命令的退出状态,如果非零则退出。因此,如果您的测试失败,则不会执行其余命令,也不会推送您的数据。