在 Windows 11 上。git 版本 2.46.0.windows.1
我正在构建一个应该用于所有存储库的“commit-msg”钩子。我构建了一个 Go 应用程序并将生成的可执行文件复制为%HOME%\.git-templates\hooks\commit-msg.exe
。
我还在%HOME%\.gitconfig
文件顶部编辑并添加了以下内容:
[init]
templatedir = C:\\Users\\<myusername>\\.git-templates
我以独立方式测试了我的应用程序,它运行良好,并且它总是打印至少一行表明它做了什么。
然后我进入我的一个本地存储库并运行git init
,然后我添加了一个虚拟文件,git add
对其执行了,然后git commit -m "test"
。它执行了提交,但没有显示我的钩子的输出。
然后我将钩子可执行文件复制到.git/hooks
存储库的子目录中,并重复相同的提交测试。输出清楚地表明它正在执行我的钩子。
由于某种原因,“全局”钩子没有被使用,但我不知道为什么。
模板的工作方式并非如此。模板通常定义如何创建新对象,而不是旧对象。这同样适用于 git - 它们仅影响新的存储库。
您更愿意寻找
core.hooksPath
直接设置全局钩子路径的设置(如果它应该全局使用),适用于所有存储库,正如您所述。