1

我写了一个 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(testet with Tortoise Git 和 GitHub for Desktop)时,尽管它接受完全相同的提交消息。它似乎只是忽略了钩子。

Git GUI 不执行这个钩子吗?

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

我可以用“LC_ALL=en_US.utf8”解决这个问题(见这里

Tortoise Git 现在会阻止损坏的提交消息,但 Github Desktop 似乎仍然忽略了这个钩子。与乌龟不同,虽然我看不到它在内部做什么。

4

2 回答 2

1

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

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

这是解决方案:

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

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

于 2020-09-23T13:03:56.343 回答
0

TortoiseGit 有自己的钩子,请使用这些。

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

此外,在某些情况下,设计不支持某些钩子(例如,prepare-commit-msg,参见为什么 TortoiseGit 在提交消息编辑后运行 prepare-commit-msg?)。

于 2020-10-02T08:53:34.250 回答