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

Eri*_*yer 6 git bash githooks macos-mojave

这一切都在 OS X Mojave 上。

我试图阻止自己错误地提交到 master 分支,因为这是我经常做的事情,使用这个 SO answer 中pre-commitGit 钩子,因为我使用 bash 而不是 sh 稍微改变了。但是,每次我尝试运行它时,都会得到以下信息:

fatal: cannot exec '.git/hooks/pre-commit': Operation not permitted
Run Code Online (Sandbox Code Playgroud)

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

-rwxr-xr-x@  1 emeyer  staff    25 Feb  5 11:50 pre-commit
Run Code Online (Sandbox Code Playgroud)

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

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

#!/bin/bash

echo "Test"
Run Code Online (Sandbox Code Playgroud)

我仍然遇到上面提到的Operation not permitted错误。我也在#!/bin/shSO answer's example 中尝试了它;同样的结果。

如果我尝试直接运行脚本,通过./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-searching 没有给我一个有效的答案,所以我在这里问如何允许操作,或任何需要的东西。

jef*_*eff 11

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

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

ls -l@ pre-commit

或者

xattr -l pre-commit

您应该能够删除该属性:

xattr -d com.apple.quarantine pre-commit

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

  • 另外,今天我了解了“ls”中“@”的含义,所以两次感谢您! (2认同)