Un modo un po 'più ordinato di ottenere la stessa lista è:
git diff --cached --name-only --diff-filter=ACM
Ciò restituirà l'elenco dei file che devono essere controllati.
Ma l'esecuzione di php -l
sulla copia di lavoro potrebbe non essere la cosa giusta da fare. Se stai facendo un commit parziale, ovvero selezionando solo un sottoinsieme delle differenze tra il tuo working set corrente e HEAD per il commit, allora il test verrà eseguito sul tuo working set, ma certifica un commit che non è mai esistito sul tuo disco.
Per eseguire correttamente l'operazione, è necessario estrarre l'intera immagine messa in scena in un'area temporanea ed eseguire il test lì.
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
Vedere Building a better pre-commit hook for Git per un'altra implementazione.
http://phpadvent.org/2008/dont-commit-that-error-by-travis-swicegood – Maerlyn
Molto carino. Tuttavia, non gestisce i file parzialmente gestiti. Vedi il mio commento alla risposta di @ LarryH. – igorw