Выполнять git pre-commit hook, только если файлы в определенной директории изменены

11

Я пытаюсь создать 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

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

Dachande663
источник

Ответы:

9

пытаться,

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

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

mitch.tux
источник
8

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

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, все равно будет выполнен!

Симоно
источник