我正在尝试编写一个简单的预提交挂钩来检查文件是否被修改,如果是,请将其压缩并将其添加到当前索引中,如下所示
#!/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
我的第二个问题是,即使我删除了条件,文件也从未实际添加到提交中,它已被修改,但从未添加。
谢谢, 利奥
答案 0 :(得分:3)
您的错误是因为您没有引用$mf
。将其更改为"$mf"
。虽然有可能比贪图人类可读命令的输出更好的方法......例如,你可以查看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正如预期的那样创建,添加和提交。