1

我正在尝试编写一个简单的预提交挂钩来检查文件是否被修改,如果是,则将其压缩并将其添加到当前索引中,如下所示

#!/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 个问题,1 我的状况不合格,每次,我都必须有错字或类似的东西,但我不知道是什么?这是我回来的错误:

[: 23: git: unexpected operator

我的第二个问题是,即使我删除了文件从未真正添加到提交中的条件,它也被修改了,但从未添加过。

谢谢,狮子座

4

1 回答 1

3

您的错误是因为您没有引用$mf. 将其更改为"$mf". 虽然可能有比 grepping 人类可读命令的输出更好的方法......你可以看看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 回答