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

问题描述 投票:0回答:2

这一切都在 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 搜索都没有给我一个有效的答案,所以我在这里询问如何允许该操作,或者需要什么。

bash git githooks macos-mojave
2个回答
15
投票

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


0
投票

尝试以下命令:

  1. chmod +x .git-hooks/预推送 其中“.git-hooks/pre-push”是已配置挂钩的目录。

  2. ln -s -f ../../.git-hooks/pre-push .git/hooks/pre-push .git-hooks/pre-push 目录已经具有我们在上一个命令中配置的访问权限

© www.soinside.com 2019 - 2024. All rights reserved.