Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git预提交钩子,将文件添加到索引中_Git_Bash_Shell_Githooks_Pre Commit Hook - Fatal编程技术网

git预提交钩子,将文件添加到索引中

git预提交钩子,将文件添加到索引中,git,bash,shell,githooks,pre-commit-hook,Git,Bash,Shell,Githooks,Pre Commit Hook,我试图编写一个简单的预提交钩子来检查一个文件是否被修改,如果是,压缩它并将其添加到当前索引中,类似这样 #!/bin/sh # was the file modified? mf='git status

我试图编写一个简单的预提交钩子来检查一个文件是否被修改,如果是,压缩它并将其添加到当前索引中,类似这样

#!/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
我有两个问题,一个是我的情况不好,每次我都会有打字错误或类似的问题,但我不知道是什么?这就是我得到的错误:

[: 23: git: unexpected operator
我的第二个问题是,即使我删除了条件,文件实际上从未添加到提交中,它也会被修改,但从未添加

谢谢,
Leo

您的错误是因为您没有引用
$mf
。将其更改为
“$mf”
。虽然可能有比将可读命令的输出变灰更好的方法。。。例如,您可以查看一下git状态--。甚至
git diff--cached
,只需检查退出代码,例如:

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

并进行了提交,z按预期创建、添加和提交。

git diff--cached
显示索引中已有的更改。也许您只需要普通的
git diff
?此外,如果您有任何其他未添加的文件,您的条件设置将失败。另外,它应该是
=
,而不是
=
。您可能真的想
grep
查找您要查找的文件,而不是使用
=
。谢谢您,Amber,我已经更新了帖子以反映您的反馈。@Amber:我认为OP只想在对该文件的更改被暂存的情况下执行此操作。这有点模糊。我完全同意不将机器生成的内容添加到存储库中,这里的问题是这是一个jQuery插件,我想提供文件的非压缩和压缩版本,无论用户想要什么,都是他们的选择。@LEOPiC:您的用户是通过克隆repo获得这些东西的吗,但无法运行单个命令来执行此操作?这很不寻常。要处理任何类型的机器生成的内容,通常需要做两件事:将其作为“构建”过程的一个简单部分(即克隆源代码,运行一个命令,完成),并使用它将其作为分发/部署/打包过程的一部分(创建压缩版本并将其放入tarball)。好的,只是给出一些一般性的建议,但这是你的工作流程!(你真正的问题是什么?我相信我已经修复了你的测试,并验证了预提交添加应该可以工作…@LEOPIC:你说它不一致?那是。。。奇怪的是,至少可以这么说,因为Git命令非常像皮肤。我会尝试从您的脚本中打印更多诊断输出-如果,您会有一个回音来确认您在
中;一旦您知道条件正常工作,就可以在
git add
之前和之后,以及在运行
git commit
之前和之后,运行
git status--cerial
,查看事情偏离预期状态的地方。“源文件”-您正在。。。寻找钩子?我很困惑。您通过修改jquery.detectBrowser.js、转移更改并提交来测试这一点,对吗?另外,在脚本中使用绝对路径有点奇怪——所有这些路径都在您的存储库中吗?钩子是从repo的顶层调用的,因此您应该能够使用相对路径。
#!/bin/bash
touch z
git add z