我尝试将“git diff”的输出放入 shell 脚本中的变量中以检查文件是否已更改,但是当在脚本中运行“git diff file”时,我总是得到以下输出:
usage: git diff [--no-index] <path> <path>
这是我在脚本中调用的内容
#!/bin/sh
cd /path/to/repo
jsdiff=`git diff file.js`
echo "jsdiff: $jsdiff"
有什么想法吗?
#!/bin/sh
#
# this script is always executed before the commit is typed
#
#
# Before commiting minify and compress javascript if changed
cd /path/to/repo/_js
jsdiff=`git diff main.js`
echo "jsdiff: $jsdiff"
#if [ "$jsdiff" != "" ]
# then
# compile js
# ./googleClosureCompile.sh
# echo "js minified"
#fi
exit 0;
最佳答案
只有当您在不是存储库的目录中运行 git diff 时,您才会收到此错误,因此 git diff 认为您想使用它作为替代品对于普通的 diff
,所以它需要两个路径。
这里的问题是,在钩子(Hook)内部 $GIT_DIR
总是设置为 .git
因此,而不是尝试简单地发现这个目录 git
查看.git
。如果你cd某处
即使在你的存储库中git
也不会找到这个.git
目录,它会认为它不在 repo 协议(protocol)中。因此,您能做的最简单的事情就是避免在钩子(Hook)中使用 cd
。
而不是
cd /path/to/repo/_js
jsdiff=`git diff main.js`
只做
jsdiff=`git diff _js/main.js`
此外,最好检查 git diff
退出代码。操作方法如下:
#!/bin/sh
git diff --quiet _js/main.js || {
# compile js
# ...
}
关于git - 在预提交 shell 脚本中调用 git diff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17047286/