2

我尝试将“git diff”的输出放入 shell 脚本中的变量中以检查文件是否已更改,但是当在脚本中运行“git diff 文件”时,我总是得到以下输出:

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;
4

1 回答 1

2

仅当您git diff在不是 repo 的目录中运行时才会出现此错误,因此git diff认为您想将其用作普通的替代品diff,因此它需要两条路径。

这里的问题是,在钩子内部$GIT_DIR总是设置为.gitso 而不是试图发现这个目录git只是查看.git. 如果你cd somewhere 甚至在你的 repo git中也找不到这个.git目录,它会认为它不在 repo 中。所以你能做的最简单的就是避免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
    # ...
}
于 2013-06-11T15:22:24.390 回答