Git hooks: «.git / hooks / pre-commit»: операция не разрешена - PullRequest
4 голосов
/ 05 февраля 2020

Это все в OS X Mojave.

Я пытаюсь не допустить ошибочного совершения коммитов в ветку master, потому что это то, что я делаю слишком часто, используя pre-commit Git хук из этого SO ответа , немного изменился, потому что я использую 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.

Поиск в Google, Binging и SO-поиск не дали мне работающего ответа, поэтому я здесь спрашиваю, как разрешить операцию, или что нужно.

1 Ответ

5 голосов
/ 05 февраля 2020

С файлом pre-commit могут быть связаны метаданные файла (@ в выводе ls указывает на это), и что метаданные этого файла могут включать атрибут com.apple.quarantine.

Вы должны быть в состоянии подтвердить это, используя следующее:

ls -l@ pre-commit

или

xattr -l pre-commit

И вы должны быть в состоянии удалить атрибут с:

xattr -d com.apple.quarantine pre-commit

ref: { ссылка }

...