Führen Sie den Git-Pre-Commit-Hook nur aus, wenn Dateien in einem bestimmten Verzeichnis geändert wurden

11

Ich versuche, ein Bash-Skript für einen Git-Pre-Commit-Hook zu erstellen. Bei jedem Commit möchte ich überprüfen, ob Dateien in einem bestimmten Verzeichnis Teil der bereitgestellten Dateien sind, und in diesem Fall einen Befehl ausführen (Grunt-Task). Bisher funktioniert alles, außer dass es nur ausgeführt wird, wenn bestimmte Dateien geändert werden. Ich versuche das zum Laufen zu bringen:

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

Das gibt mir leider Fehler.

Dachande663
quelle

Antworten:

9

Versuchen,

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

Viel Spaß beim Hacken

mitch.tux
quelle
8

Versuchen Sie es so:

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

Dies sieht der akzeptierten Antwort sehr ähnlich, aber diese ist falsch. In bash / sh wird jeder Befehl in einer Pipeline in einer separaten Subshell ausgeführt, sodass ein Exit im then-Teil nur die Subshell beendet. Jeder Code, der auf fi folgt, wird weiterhin ausgeführt!

SimonO
quelle