Я не уверен, что здесь есть проблема.
Упомянутый вами фрагмент, вероятно, взят из сообщения в блоге Не совершайте эту ошибку .
И он включает в себя:
Далее мы вызываем git diff-index
с несколькими параметрами.
Во-первых, мы добавляем --cached
, чтобы сообщить Git, что мы хотим только файлы, которые будут зафиксированы .
Затем мы добавляем --name-only
, чтобы сообщить Gitвыводить только имена файлов, которые фиксируются.
Кажется, что файлы, которые должны быть зафиксированы, являются именно теми, которые хук перед фиксацией захочет проверить.
Дажеесли они отличаются от файлов в рабочем каталоге, то их версия (в индексе) должна быть зафиксирована.И это та же самая версия, которая будет отправлена процессу php -l
.
На самом деле, проблема не в самом git diff-index
(с или без --full-index
) в путиВы прочтете содержимое файла в индексе
- Хук "PHP Advent 2008" просто попытается получить доступ к файлу по его имени (сриск доступа к рабочей копии)
exec("php -l " . escapeshellarg($file), $lint_output, $return);
result=$(git cat-file -p $sha | /usr/bin/env $PHP_BIN -l 2>/dev/null)
Использование git cat-file
- ключ здесь для доступа к объекту вGit репо (то есть не в «рабочем каталоге»)