如何写一个python pre-push 来检查commit message?

How to write a python pre-push to check the commit message?

我知道我可以使用 commit-msg 挂钩来检查消息(我做到了)但我希望在使用不同的标准推送之前再次检查消息。

.git/hooks下给出的例子是用shell脚本写的,但我想写一个python脚本我想的字符串操作更复杂。

我知道我可以将第一行更改为 #!/usr/bin/env python。我的问题是,我不知道如何获取最新提交的消息字符串。我尝试了 git rev-list(在该示例的第 44 行),但它没有给我消息字符串,它需要提交哈希 ID。请注意,消息字符串可能是多行的(因为第一行被限制为最多 50 个字符)。

EIDT: 其他问题Python中询问如何编写预推脚本,但没有涉及检查消息字符串。

pre-push hook is passed a list of local/remote refs and commit IDs (sha1), so you have to read them line by line, split and get the local commit ID. 如何在 shell 脚本中完成。

有了提交 ID,您可以使用命令提取完整的提交消息

git show --format='%B' -s $SHA1

在Python中是这样的:

for line in sys.stdin:
    local_ref, local_sha1, remote_ref, remote_sha1 = line.strip().split()
    message = subprocess.check_output(
        ['git', 'show', '--format=%B', '-s', local_sha1])
    if not check(message):
        sys.exit(1)