特定のディレクトリ内のファイルが変更された場合にのみ、git pre-commitフックを実行します


11

git pre-commitフック用のbashスクリプトを作成しようとしています。コミットが行われるときはいつでも、特定のディレクトリ内のファイルがステージングされたファイルの一部であるかどうかを確認したい場合は、コマンドを実行します(Gruntタスク)。これまでのところ、特定のファイルが変更された場合にのみ実行されることを除いて、すべてが機能しています。私はこれを動作させるようにしています:

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

残念ながら、これはエラーになります。

回答:


9

試して、

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

ハッピーハッキング


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パーツのexitはサブシェルのみを終了し、fiに続くコードは引き続き実行されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.