1

ファイルが変更されたかどうかを確認するための単純な pre-commit フックを作成しようとしています。変更されている場合は、圧縮して現在のインデックスに追加します。

#!/bin/sh                                                                                                                                                    

# was the file modified?
mf='git status | grep jquery.detectBrowser.js'

# is the non-compressed file in the staging area?
if [ $mf != "" ]
then
  # alert the user
  echo "Javascript file modified, YUI Compressor will begin now."

  # go to rhino
  cd $HOME/apps/rhino/yuicompressor-2.4.7/build

  # compress my file
  java -jar yuicompressor-2.4.7.jar ~/www/jquery.detectBrowser.js/jquery.detectBrowser.js -o ~/www/jquery.detectBrowser.js/jquery.detectBrowser.min.js

  # comeback to the initial directory
  cd -

  # add the new file into the index
  git add ~/www/jquery.detectBrowser.js/jquery.detectBrowser.min.js
fi

私には 2 つの問題があります。これは私が返すエラーです:

[: 23: git: unexpected operator

そして私の2番目の問題は、条件を削除しても、ファイルが実際にはコミットに追加されず、変更されても追加されないことです。

ありがとう、レオ

4

1 に答える 1

3

あなたのエラーは、引用していないためです$mf。に変更し"$mf"ます。人間が読めるコマンドの出力をgrepするよりも良い方法があるかもしれませんが...git status --porcelainたとえば、見てみることができます。またはgit diff --cached <path>、終了コードを調べるだけです。

if ! git diff --quiet --cached <path>; then
     # the file was modified; do stuff
fi

Amber があなたを誤解させたのではないかと思います: を使用する必要があり--cachedます。なぜなら、変更がステージングされていない場合、このコミットに関する限り、変更はないため、他に何もしたくないと思います。

そしてもちろん、私はあなたのプロジェクトを知りませんが、なぜあなたがこのようなことをしているのかはわかりません.チェックインした。

あなたの最後の問題については、ファイルが変更されているがコミットに追加されていないため、おもちゃの例では再現できません。これをプリコミットフックとして作成しました:

#!/bin/bash
touch z
git add z

そしてコミットを行い、z は期待どおりに作成、追加、およびコミットされました。

于 2011-12-12T07:12:14.090 に答える