Рычаг мерзавца перед фиксацией: изменился/добавил файлы

Я пишу рычаг перед фиксацией. Я хочу работать php -l против всех файлов с .php расширением. Однако я застреваю.

Я должен получить список новых/измененных файлов, которые подготавливаются. должны быть исключены удаленные файлы.

Я попытался использовать git diff и git ls-files, но я думаю, что мне нужна рука здесь.

61
задан igorw 9 March 2010 в 20:49
поделиться

2 ответа

git diff --cached --name-status покажет сводку того, что поставлено, так что вы можете легко исключить удаленные файлы, например:

M       wt-status.c
D       wt-status.h

Это означает, что файл wt-status.c был изменен, а wt-status.h удален из промежуточной области (индекс). Итак, чтобы проверить только файлы, которые не были удалены:

steve@arise:~/src/git <master>$ git diff --cached --name-status | awk '$1 != "D" { print $2 }'
wt-status.c
wt-status.h

Вам придется перепрыгнуть через дополнительные обручи, чтобы иметь дело с именами файлов с пробелами (опция -z для git diff и более интересный синтаксический анализ)

{{1 }}
48
ответ дан 24 November 2019 в 17:06
поделиться

Несколько более аккуратный способ получения того же списка следующий:

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

Смотрите Создание лучшего крючка предварительной коммисии для Git'а для другой реализации.

88
ответ дан 24 November 2019 в 17:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: