Git GUI忽略commit-msg钩子

问题描述

我写了一个commit-msg钩子来检查提交消息以使用正确的格式。 使用git bash时,它可以按预期工作:

$ git commit -m "test"

[Invalid Commit Message]
------------------------
Commit message needs to start with an uppercase character and be imperative

Example: Add new character model
Regex: ^[A-Z](?!\w*ed).*$
Actual commit message: "test"
Actual length: 5

使用Git GUI(带有Tortoise Git和GitHub桌面版的Testet)时,尽管它接受完全相同的提交消息。似乎只是忽略了钩子。

Git GUI是否不执行此钩子?

更新:我发现该钩子正在由git乌龟执行,由于使用了字符集,它只是出现了一个错误:“” grep:-P仅支持单字节和UTF-8语言环境

我可以使用“ LC_ALL = en_US.utf8”解决此问题(请参见here

Tortoise Git现在可以阻止损坏的提交消息,但是Github Desktop似乎仍然忽略了该钩子。 与Tortoise不同,尽管我看不到它在内部做什么。

解决方法

LC_ALL = zh_CN.utf8是正确的解决方案。

它只需与grep命令在同一行中即可。 我尝试将其设置在文件的顶部,该文件以某种方式适用于Tortoise,但不适用于GitHub Desktop。

这是解决方案:

if [[ $(LC_ALL=en_US.utf8 grep -Pc '^[A-Z].*$' <<< ${title} ) == 0 ]];

仅当脚本显式输出非0的退出代码时,GitHub桌面才会输出stderr输出。当脚本失败时,它不会输出任何错误。

,

TortoiseGit有其自己的钩子,请使用它们。

请参见https://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html#tgit-dug-settings-hooks

在某些情况下,某些挂钩在设计上不受支持(例如prepare-commit-msg,请参阅Why does TortoiseGit run prepare-commit-msg after commit message edit?)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...