在命令行上使用git,您可以在输入提交的日志消息之前看到预提交挂钩的结果。如果你的预提交挂钩导致提交失败,你要小心,不要写任何东西。
但是使用magit时,系统会要求您输入日志注释,然后它会评估您的钩子,如果失败,您将看不出原因。你刚刚读到:
git exited abnormally with code 1.
我理解这是正常的,因为只有在完成日志消息的编辑后,magit才会运行git命令。
那么,在请求日志之前,您将如何让magit评估您的钩子呢?如何使magit显示钩子的结果?
一个相关的问题是,如何为预提交挂钩提供参数,以便仅对存储的文件而不是存储库中的所有文件运行它?
我使用预提交挂钩主要是为了检查我是否忘记了调试内容,比如剩余的"ipdb"和一些个人跟踪。
谢谢!
我已经编写了在打开日志消息缓冲区之前运行钩子的代码:
https://github.com/vanicat/magit/commit/87ec17c46b156c8508a47aa6c9ba982ef8a61b4c
你可以测试它,它错过了忽略钩子的可能性,现在除了预提交之外,不要运行其他钩子。
在magit调用git失败后,您应该能够通过使用$
来了解原因
对于评估预提交钩子,目前在magit中没有任何东西。你可以试着在magit-log-edit-mode-hook
中放一些东西:
(add-hook 'magit-log-edit-mode-hook
'(lambda ()
(shell-command "shell command to run git's hook")))
当然,这里缺少shell命令。。。
对于预提交中的相关问题,您需要使用git来了解将提交的文件。类似的东西
git diff --name-only --cached