use*_*653 40 windows git version-control githooks
我刚刚开始研究Git钩子,但我似乎无法让它们运行.
我设置了一个本地存储库,所以我的项目文件夹中现在有一个'.git'目录.我已将".cmd"文件添加到名为"pre-commit.cmd"的C:/path/to/my/project/.git/hooks目录中.这是这个文件的内容:
echo "HOOK RUNNING"
echo. 2>C:/path/to/my/project/.git/hooks/EmptyFile.txt
Run Code Online (Sandbox Code Playgroud)
这应该回显文本"HOOK RUNNING"并在该目录中创建一个空文本文件.但是,如果我通过我的IDE(NetBeans)提交更改或使用Git Bash提交,它们似乎都没有运行我的预提交挂钩,因为没有创建文件.
我的理解是,你需要做的就是使用钩子的名称来添加一个可执行文件(正如我所做的那样).难道我做错了什么?
注意:这是在Windows 7 PC上.
Ase*_*nar 49
如何命名你的钩子pre-commit(没有任何扩展名)?
编辑:并添加#!/bin/sh第一行或 #!/bin/bash(在评论中建议)
edi*_*999 36
您可能没有运行该pre-commit文件的权限
在您的终端中运行:
chmod +x .git/hooks/pre-commit
Run Code Online (Sandbox Code Playgroud)
感谢@vaughan提出这个想法
小智 19
就我而言,我设置了core.hooksPath错误的目录。
重置它git config --global core.hooksPath '~/.githooks'解决了问题:)
您可以使用以下命令验证您的钩子路径git config --get core.hooksPath
小智 11
默认情况下,假设 git hook脚本很简单, Git hooks在 Git for Windows 上工作。
请注意:Git是为 shell解释而制作的;因此,在 Windows 命令提示符或 Windows 制造的 PowerShell 上使用 git hooks 将有其固有的缺陷,并且无法预期完全的互操作性。
在 Windows 上使用 git hooks 是可能的,但有很多缺点。
Windows 版 Git使用一个 shell 模拟器,使 bash 和 shell 命令成为可能。这意味着当一个 git hook 被 git 激活时,windows 版本将使用 shell 模拟器运行命令。反过来,将这些 shell 命令转换为 Windows 操作系统可以理解的命令。意思是,简单的 shell 脚本可以立即运行。例如,pre-commit随 git 存储库初始化一起提供的 git hook无需修改即可运行。
git initcd .git\hooks该目录包含所有 git hook 脚本。创建一个名为pre-commitNote的文件
文件名很重要
用以下 shell 脚本替换内容
#!/bin/sh
echo "Hello, World!"
Run Code Online (Sandbox Code Playgroud)test.txt使用命令命名的文件echo "something" > text.txtgit add test.txtgit commit -m "test commit"git commit -m "test commit"
Hello, World!
[master f00ccea] test commit
Run Code Online (Sandbox Code Playgroud)当使用非常高级的 shell 脚本在 git hooks 中执行操作时,Windows shell 解释并不总是堆积如山。例如,当为 NPM 使用 Husky git hook 插件以及更漂亮的格式化程序时,命令不会映射 1-1。这意味着您的预提交 git 钩子将在 Windows 上失败。
git hook 是一个可执行脚本;但是,您使用的是命令提示符脚本 ( .cmd) 而不是 shell 脚本 ( .sh)。如果您想要在 Windows 操作系统上描述的这种行为,则创建命名的文件pre-commit并将其放置在.git\hooks目录中(相对于您正在处理的项目)。然后将以下内容放入该文件中。
.git\钩子\预提交
git commit -m "test commit"
Hello, World!
[master f00ccea] test commit
Run Code Online (Sandbox Code Playgroud)
您会注意到 git 钩子工作并将单词输出HOOK RUNNING到控制台,并且thisCauseError将打印一条错误消息stderr并将其打印到文件中EmptyFile.txt。