Exécuter git pre-commit hook uniquement si les fichiers de certains répertoires sont modifiés

11

J'essaie de créer un script bash pour un hook de pré-validation git. Chaque fois qu'une validation est effectuée, je veux vérifier si les fichiers dans un certain répertoire font partie des fichiers intermédiaires et si oui, exécutez une commande (tâche Grunt). Jusqu'à présent, tout fonctionne, sauf pour ne fonctionner que si certains fichiers sont modifiés. J'essaie de faire fonctionner cela:

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

Cela me donne malheureusement des erreurs.

Dachande663
la source

Réponses:

9

essayer,

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

Piratage heureux

mitch.tux
la source
8

Essayez-le comme ceci:

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

Cela ressemble beaucoup à la réponse acceptée, mais celle-ci est fausse. Dans bash / sh, chaque commande d'un pipeline est exécutée dans un sous-shell séparé, donc une sortie dans la partie then ne quittera que le sous-shell, tout code qui suit le fi sera toujours exécuté!

SimonO
la source