【问题标题】:Git GUIs ignore commit-msg hookGit GUI 忽略 commit-msg 钩子
【发布时间】:2020-09-23 10:15:02
【问题描述】:

我编写了一个 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”解决这个问题(见here

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

【问题讨论】:

  • 看起来它正在执行,但 GUI 的字符集导致提交挂钩脚本中出现错误:“grep: -P 仅支持单字节和 UTF-8 语言环境”幸运的是,乌龟输出了日志跨度>

标签: git githooks tortoisegit github-desktop


【解决方案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 输出。脚本失败时不会输出任何错误。

【讨论】:

    【解决方案2】:

    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?)。

    【讨论】:

    • 为什么?似乎这只是一个分层在 git hooks 之上的 gui,我试图让它与 GUI 无关,所以无论他使用的是什么 git GUI,每个人都可以使用它
    • 现在 TortoiseGit 只是调用 git.exe,但是,计划 TortoiseGit 使用不支持开箱即用的钩子的 libgit2。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2021-09-29
    • 2021-11-30
    • 2021-08-07
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多