немного аккуратнее способ получения такой же список является:
git diff --cached --name-only --diff-filter=ACM
Это возвращает список файлов, которые должны быть проверены.
Но просто работающий php -l
на вашей рабочей копии может оказаться неправильной. Если вы выполняете частичную фиксацию, то есть просто выбираете подмножество различий между вашим текущим рабочим набором и HEAD для фиксации, тогда тест будет выполняться на вашем рабочем наборе, но будет удостоверять фиксацию, которая никогда не существовала на вашем диск.
Чтобы сделать это правильно, вы должны извлечь все поэтапное изображение в область темпа и выполнить там тест.
rm -rf $TEMPDIR
mkdir -p $TEMPDIR
git checkout-index --prefix=$TEMPDIR/ -af
git diff --cached --name-only --diff-filter=ACM | xargs -n 1 -I '{}' \bin\echo TEMPDIR/'{}' | grep \\.php | xargs -n 1 php -l
См. Building a better pre-commit hook for Git для другой реализации.
http://phpadvent.org/2008/dont-commit-that-error-by-travis-swicegood – Maerlyn
Это довольно хорошо. Однако он не обрабатывает частично поставленные файлы. См. Мой комментарий к ответу @ LarryH. – igorw