这一切都在 OS X Mojave 上。
我试图阻止自己错误地提交到主分支,因为这是我经常做的事情,使用来自这个SO答案的
pre-commit
Git钩子,稍微改变了,因为我使用bash代替sh。不过,每次我尝试运行它时,我都会得到以下信息:
fatal: cannot exec '.git/hooks/pre-commit': Operation not permitted
我检查了
.git
和 .git/hooks
目录的权限。两者都是drwxrwxrwx
。 pre-commit
本身的权限是:
-rwxr-xr-x@ 1 emeyer staff 25 Feb 5 11:50 pre-commit
…这与我复制到
pre-commit.sample
然后替换内容的pre-commit
文件相同。我尝试过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
,错误都是一致的。
谷歌搜索、必应搜索和 SO 搜索都没有给我一个有效的答案,所以我在这里询问如何允许该操作,或者需要什么。
pre-commit
文件可能具有与其关联的文件元数据(@
输出中的 ls
表明这一点),并且该文件元数据可能包含 com.apple.quarantine 属性。
您应该能够使用以下内容确认这一点:
ls -l@ pre-commit
或
xattr -l pre-commit
您应该能够使用以下方法删除该属性:
xattr -d com.apple.quarantine pre-commit
尝试以下命令:
chmod +x .git-hooks/预推送 其中“.git-hooks/pre-push”是已配置挂钩的目录。
ln -s -f ../../.git-hooks/pre-push .git/hooks/pre-push .git-hooks/pre-push 目录已经具有我们在上一个命令中配置的访问权限