如何在脚本中检查是否存在本地更改?也许结合git describe
?
4 回答
从 git 1.6.6 开始,git-describe
已经接受了一个--dirty
选项。如果您的工作树中有未提交的更改,那么您将获得如下输出:
$ git describe --dirty
1.0.2-2-g215081f-dirty
您需要确保同时满足以下两个属性:
HEAD和索引缓存没有区别
git diff-index --cached HEAD
索引和工作树之间没有区别:
git diff-files
这两个命令都带有一个--quiet
参数,该参数将根据是否存在差异来设置退出代码(在 git 1.4 之后的某个时间开始)。如果你需要让它在 git 1.4 上运行,你需要在没有的情况下运行命令--quiet
并检查它们是否产生任何输出。
注意: git diff
是一个瓷器命令,因此不应在脚本中使用。请改用上述管道命令。
示例 shell 代码,取自我的git_version.sh 脚本:
git_dirty=yes
# git-1.4 does not understand "git-diff-files --quiet"
# git-1.4 does not understand "git-diff-index --cached --quiet HEAD"
if [ "x$($GIT diff-files)" = "x" ] && [ "x$($GIT diff-index --cached HEAD)" = "x" ]; then
git_dirty=no
fi
如果你可以要求 git 版本 >= 1.5,if git diff-files --quiet && git diff-index --quiet --cached HEAD; then
可以替换上面的比较。
注意:此解决方案(与 Antony 的 interactive 完全一样git diff HEAD --quiet
)仅发现相对于 HEAD的局部变化。但是,本地提交也可以被认为是本地更改,并且自然不会出现在与 HEAD 的任何差异中。您将需要检查 SHA1 值git describe
用于检测 HEAD 是否来自您认为不是本地更改的一组提交。
git diff --quiet
如果有更改则返回退出状态 1,如果没有则返回 0。
请记住,它将显示分阶段更改和工作目录之间的差异。如果您对 HEAD 和工作目录之间的更改感兴趣,您应该使用git diff HEAD --quiet
.
--quiet
暗示--exit-code
。
git status
如果没有本地更改,则以非零状态退出。
但我不明白你的意思是“与 git describe 结合”。