8

Я пытаюсь создать bash-скрипт для git pre-commit hook. Всякий раз, когда выполняется фиксация, я хочу проверить, являются ли файлы в определенном каталоге частью промежуточных файлов, и если это так, выполнить команду (задача Grunt). Пока у меня все работает, кроме запуска только при изменении определенных файлов. Я пытаюсь заставить это работать:

SRC_PATTERN="site/assets/js/"
if [ grep --quiet $SRC_PATTERN `git diff --cached --name-only` ]
then
  echo "none"
  exit 0
fi

Это, к сожалению, дает мне ошибки.

2 ответа2

6

пытаться,

git diff --cached --name-only | if grep --quiet "$SRC_PATTERN"
then
    ...

Счастливого взлома

4

Попробуйте это так:

SRC_PATTERN="site/assets/js/"
if git diff --cached --name-only | grep --quiet "$SRC_PATTERN"
then
  echo "none"
  exit 0
fi

Это очень похоже на принятый ответ, но это неверный ответ. В bash/sh каждая команда в конвейере выполняется в отдельной подоболочке, поэтому выход в части then будет только выходить из подоболочки, любой код, следующий за fi, все равно будет выполнен!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .