我如何检查我的git存储库中是否有任何未提交的更改:
添加到索引但未提交的更改 无路径的文件
从一个脚本?
git-status在git 1.6.4.2版本中似乎总是返回0。
我如何检查我的git存储库中是否有任何未提交的更改:
添加到索引但未提交的更改 无路径的文件
从一个脚本?
git-status在git 1.6.4.2版本中似乎总是返回0。
当前回答
我使用最简单的自动测试来检测脏状态=任何更改,包括未跟踪的文件:
git add --all
git diff-index --exit-code HEAD
备注:
如果没有add——all, diff-index不会注意到未跟踪的文件。 通常情况下,我在测试错误代码后运行git重置来取消所有内容。 考虑用quiet代替exit-code来避免输出。
其他回答
看了一下这些答案…(在*nix和windows上有各种问题,这是我的要求)…发现以下方法效果很好…
git diff --no-ext-diff --quiet --exit-code
检查*nix中的退出代码
echo $?
#returns 1 if the repo has changes (0 if clean)
查看窗口$中的退出代码
echo %errorlevel%
#returns 1 if the repos has changes (0 if clean)
来源:https://github.com/sindresorhus/pure/issues/115 感谢@paulirish的分享
一个DIY的可能性,更新遵循0xfe的建议
#!/bin/sh
exit $(git status --porcelain | wc -l)
正如Chris Johnsen所指出的,这只适用于Git 1.7.0或更新版本。
这是一个更加shell友好的变体,用于查找存储库中是否存在任何未跟踪的文件:
# Works in bash and zsh
if [[ "$(git status --porcelain 2>/dev/null)" = *\?\?* ]]; then
echo untracked files
fi
这不会派生第二个进程grep,并且不需要检查您是否在git存储库中。这对于shell提示等很方便。
我使用最简单的自动测试来检测脏状态=任何更改,包括未跟踪的文件:
git add --all
git diff-index --exit-code HEAD
备注:
如果没有add——all, diff-index不会注意到未跟踪的文件。 通常情况下,我在测试错误代码后运行git重置来取消所有内容。 考虑用quiet代替exit-code来避免输出。
你也可以
git describe --dirty
. 如果它检测到一个肮脏的工作树,它将在结尾附加单词“-dirty”。根据git-describe(1):
--dirty[=<mark>]
Describe the working tree. It means describe HEAD and appends <mark> (-dirty by default) if
the working tree is dirty.
. 注意:未跟踪的文件不被认为是“脏文件”,因为,正如manpage声明的那样,它只关心工作树。