Ejecute git pre-commit hook solo si se modifican los archivos en cierto directorio

11

Estoy tratando de crear una secuencia de comandos bash para un gancho de confirmación previa de git. Cada vez que se realiza una confirmación, quiero verificar si los archivos en un determinado directorio son parte de los archivos organizados y, de ser así, ejecutar un comando (tarea Grunt). Hasta ahora tengo todo funcionando, excepto que solo se ejecuta si se modifican ciertos archivos. Estoy tratando de hacer que esto funcione:

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

Esto desafortunadamente me está dando errores.

Dachande663
fuente

Respuestas:

9

tratar,

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

Feliz piratería

mitch.tux
fuente
8

Pruébalo así:

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

Esto se parece mucho a la respuesta aceptada, pero esa está equivocada. En bash / sh cada comando en una tubería se ejecuta en una subshell separada, por lo que una salida en la parte entonces solo saldrá de la subshell, ¡cualquier código que siga al fi aún se ejecutará!

SimonO
fuente