如果本地Git存储库有更改,如何签入Bash脚本?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

有些脚本如果检查更改,它们就不能正常工作。

我试过这样做:

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

使用--quietGit的好处是,一旦遇到一个差异,它就可以停止处理,所以它可能不必检查整个工作树。

用户回答回答于

使用git status:

cd /git/directory
if [[ `git status --porcelain` ]]; then
  # Changes
else
  # No changes
fi

扫码关注云+社区