Git钩子:'.git/hooks/pre-commit':不允许操作

Posted

技术标签:

【中文标题】Git钩子:\'.git/hooks/pre-commit\':不允许操作【英文标题】:Git hooks: '.git/hooks/pre-commit': Operation not permittedGit钩子:'.git/hooks/pre-commit':不允许操作 【发布时间】:2020-05-21 15:46:23 【问题描述】:

这一切都在 OS X Mojave 上。

我试图阻止自己错误地向 master 分支提交,因为这是我经常做的事情,使用 the pre-commit Git hook from this SO answer,略有改变,因为我使用 bash 而不是 sh。但是,每次我尝试运行它时,都会得到以下信息:

fatal: cannot exec '.git/hooks/pre-commit': Operation not permitted

我检查了.git.git/hooks 目录的权限。两者都是drwxrwxrwxpre-commit 本身的权限是:

-rwxr-xr-x@  1 emeyer  staff    25 Feb  5 11:50 pre-commit

...这与我复制到pre-commit 然后替换内容的pre-commit.sample 文件相同。我试过chmod +w,但没有解决。

我决定简化我的测试并将pre-commit 的内容替换为以下内容:

#!/bin/bash

echo "Test"

我仍然收到上面提到的Operation not permitted 错误。我还尝试了#!/bin/sh,就像在 SO 答案的示例中一样;同样的结果。

如果我尝试直接运行脚本,在命令行中输入./pre-commit,我会得到一个稍微不同的错误:-bash: ./pre-commit: /bin/bash: bad interpreter: Operation not permitted。无论我使用/bin/bash/bin/sh/usr/local/bin/bash 还是/usr/local/bin/sh,错误都是一致的。

谷歌搜索、Binging 和 SO 搜索没有给我一个有效的答案,所以我在这里询问如何允许该操作,或者任何需要的。

【问题讨论】:

您的 git 存储库是否位于使用 noexec 选项挂载的文件系统上? 您使用的是 MacOS 吗? (@ 表明您是。)您可能正在使用 Mojave 中的系统完整性保护功能。 它实际上是 OS X Mojave!我尝试直接运行pre-commit 并得到-bash: ./pre-commit: /bin/bash: bad interpreter: Operation not permitted(和sh 相同的基本结果), 【参考方案1】:

pre-commit 文件可能具有与之关联的文件元数据(ls 输出中的@ 表明了这一点),并且该文件元数据可能包含 com.apple.quarantine 属性。

您应该能够使用以下方式确认这一点:

ls -l@ pre-commit

xattr -l pre-commit

你应该能够删除属性:

xattr -d com.apple.quarantine pre-commit

参考:https://***.com/a/9952742/157515

【讨论】:

就是这样!谢谢! 另外,今天我知道了@ls 中的含义,所以再次感谢您!

以上是关于Git钩子:'.git/hooks/pre-commit':不允许操作的主要内容,如果未能解决你的问题,请参考以下文章

Git 预推钩子

如何删除远程 git 钩子?

git钩子

git-svn 的钩子

用 git 钩子,检测代码规范性(eslintstandard)

Git钩子:'.git/hooks/pre-commit':不允许操作