GIT кеширует pre-commit хуки
Из-за gJSLint извергает ошибки из-за отсутствия документации участника. Мы обновили наш хук pre-commit, поставленный перед долгим JavaScript. Редактирование включало в себя правило 220 gJSLint (игнорируйте отсутствующую документацию участника). Однако при выполнении коммита GIT по-прежнему жалуется, что JavaScript недействителен. Запуск gJSLint сам по себе не приводит к ошибкам.
gjslint --strict --disable = 5,6,110,220 app / pits / modules / api.js
Мы удалили подготовленные файлы, а затем безуспешно добавили их обратно в постановку.
GIT кеширует pre-commit ловушки?
Pre-Commit Hook
#!/bin/sh
files=$(git diff --cached --name-only --diff-filter=ACM | grep ".js$") if [ "$files" = "" ]; then
exit 0 fi
pass=true
echo "\nValidating JavaScript:\n"
for file in ${files}; do
result=$(gjslint --strict --disable=5,6,110,220 ${file} | grep "${file} is OK")
if [ "$result" != "" ]; then
echo "\t\033[32mJSLint Passed: ${file}\033[0m"
else
echo "\t\033[31mJSLint Failed: ${file}\033[0m"
pass=false
fi done
echo "\nJavaScript validation complete\n"
if ! $pass; then
echo "\033[41mCOMMIT FAILED:\033[0m Your commit contains files that should pass JSLint but do not. Please fix the JSLint errors and try again.\n try: gjslint --strict --disable=5,6,110,220 file.js\n"
exit 1 else
echo "\033[42mCOMMIT SUCCEEDED\033[0m\n" fi
Результат git commit -m"...."
Проверка JavaScript:
Ошибка JSLint: app/pits/modules/api.js
Ошибка JSLint: app/pits/modules/State.js
Ошибка JSLint: app/pits/modules/table.js
Проверка JavaScript завершена
COMMIT FAILED: ваш коммит содержит файлы, которые должны пройти JSLint, но
do not. Please fix the JSLint errors and try again. try: gjslint --strict --disable=5,6,110,220 file.js
Среда
Git версия 1.8.1.2
gjslint версия 2.3.13
версия lubuntu 13.04
1 ответ
Эта проблема не имела никакого отношения к GIT и была вызвана плохо написанным хуком предварительной фиксации.
#!/bin/sh
files=$(git diff --cached --name-only --diff-filter=ACM | grep ".js$")
if [ "$files" = "" ]; then
exit 0
fi
pass=true
echo "\nValidating JavaScript:\n"
for file in ${files}; do
eval "gjslint --strict --disable=5,6,110,220 ${file}"
if [ $? -eq 0 ]; then
echo "\t\033[32mJSLint Passed: ${file}\033[0m"
else
echo "\t\033[31mJSLint Failed: ${file}\033[0m"
pass=false
fi
done
echo "\nJavaScript validation complete\n"
if ! $pass; then
echo "\033[41mCOMMIT FAILED:\033[0m Your commit contains files that should pass JSLint but do not. Please fix the JSLint errors and try again.\n try: gjslint --strict --disable=5,6,110,220 file.js\n"
exit 1
else
echo "\033[42mCOMMIT SUCCEEDED\033[0m\n"
fi