小编典典

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

all

如果检查更改,有些脚本将无法正常工作。

我试过这样:

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

是否有某种布尔检查自上次提交以来是否有更改,或者我如何才能真正测试我的本地存储库是否有新更改?

我正在为版本创建脚本(我在这里的某个地方找到)做这一切。


阅读 65

收藏
2022-05-31

共1个答案

小编典典

你所做的几乎可以工作:你应该引用$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 可以在遇到单个差异时立即停止处理,因此它可能不必检查整个工作树。

2022-05-31