首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果我的本地Git存储库发生了更改,我如何签入Bash脚本?

如果我的本地Git存储库发生了更改,我如何签入Bash脚本?
EN

Stack Overflow用户
提问于 2011-02-28 23:15:13
回答 11查看 109.1K关注 0票数 223

有一些脚本在检查更改时不能正常工作。

我是这样尝试的:

代码语言:javascript
复制
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

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

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

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2011-02-28 23:27:11

你所做的几乎是可行的:你应该引用$CHANGED,如果它是空的,那么-z测试为空,这意味着没有变化。你的意思是:

代码语言:javascript
复制
if [ -n "$CHANGED" ]; then
    VN="$VN-mod"
fi

引用自Git的GIT-VERSION-GEN

代码语言:javascript
复制
git update-index -q --refresh
test -z "$(git diff-index --name-only HEAD --)" ||
VN="$VN-dirty"

看起来你是在抄袭,但你只是忘记了引用的细节。

当然,您也可以这样做:

代码语言:javascript
复制
if git diff-index --quiet HEAD --; then
    # No changes
else
    # Changes
fi

或者,如果你只关心“某些东西已经改变”的情况:

代码语言:javascript
复制
if ! git diff-index --quiet HEAD --; then
    VN="$VN-mod"
fi

使用--quiet的好处是它可以在遇到单个差异时立即停止处理,因此它可能不必检查整个工作树。

票数 231
EN

Stack Overflow用户

发布于 2014-08-06 07:11:28

使用git status

代码语言:javascript
复制
cd /git/directory
if [[ `git status --porcelain` ]]; then
  # Changes
else
  # No changes
fi
票数 383
EN

Stack Overflow用户

发布于 2020-06-05 18:55:12

这也行得通:

代码语言:javascript
复制
if [ $(git status --porcelain | wc -l) -eq "0" ]; then
  echo "   Git repo is clean."
else
  echo "   Git repo dirty. Quit."
  exit 1
fi
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5143795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档