内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
有些脚本如果检查更改,它们就不能正常工作。
我试过这样做:
VN=$(git describe --abbrev=7 HEAD 2>/dev/null) git update-index -q --refresh CHANGED=$(git diff-index --name-only HEAD --) if [ ! -z $CHANGED ]; then VN="$VN-mod" fi
是否存在某种布尔检查,自上次提交以来是否发生了更改,或者如何真正测试本地存储库是否有新的更改?
所有这些都是为了一个版本创建脚本(我在这里找到的)。
你所做的几乎会奏效:你应该引用$CHANGED
万一它是空的,而且-z
测试为空,这意味着没有变化。你的意思是:
if [ -n "$CHANGED" ]; then VN="$VN-mod" fi
git的一句话GIT-VERSION-GEN
:
git update-index -q --refresh test -z "$(git diff-index --name-only HEAD --)" || VN="$VN-dirty"
看起来你是在复制,但你只是忘记了引用的细节。
当然,你也可以这样做:
if git diff-index --quiet HEAD --; then # No changes else # Changes fi
或者,如果你只关心“某些事情已经改变”的情况:
if ! git diff-index --quiet HEAD --; then VN="$VN-mod" fi
使用--quiet
Git的好处是,一旦遇到一个差异,它就可以停止处理,所以它可能不必检查整个工作树。
使用git status
:
cd /git/directory if [[ `git status --porcelain` ]]; then # Changes else # No changes fi