获取git状态布尔没有缓慢的差异列表
我有一个bash PS1获得红色,如果我的git目录更改或绿色,如果没有更改。获取git状态布尔没有缓慢的差异列表
if [ $? -eq 0 ]; then \ echo "$(echo `git status` | grep "nothing to commit" > /dev/null 2>&1; \ if [ "$?" -eq "0" ]; then \ # @4 - Clean repository - nothing to commit echo "\n'$Green'"$(__git_ps1 "(%s)"'$Color_Off'); \ else \ # @5 - Changes to working tree echo "\n'$IRed'"$(__git_ps1 "(%s)"'$Color_Off'); \ fi)\$ "; \ fi)'
这项工作很好! 但问题是,在一些工作目录非常缓慢,因为存在很多变化和大的差异。
什么是不完整的
我试着用git status --short
或git status --porcelain
但速度很慢但更好的办法让git的状态布尔(是改变或不改变)。
回答:
也许这个答案可能是有用的:https://stackoverflow.com/a/2659808/3903076
总之,你可以在下面的检查,根据需要进行修改。查看链接的答案以获取更多详细信息
if ! git diff-index --quiet --cached HEAD; then # Index has changes.
exit 1;
elif ! git diff-files --quiet; then
# Working tree has changes.
exit 1;
elif [ -n "`git ls-files --others --exclude-standard`" ]; then
# There are untracked unignored files.
exit 1;
fi
回答:
我找到了答案在这里:https://gist.github.com/sindresorhus/3898739 git diff --quiet --ignore-submodules HEAD 2>/dev/null
这是非常快,但如果你有一个未跟踪文件,你将有一个changed==0
布尔,但对我很好。
git_ps1_style() {
local GREEN="\001\033[0;32m\002"
local RED="\001\033[0;91m\002"
local git_branch="$(git rev-parse --abbrev-ref HEAD 2>/dev/null)";
local git_ps1_style="";
if [ -n "$git_branch" ]; then
(git diff --quiet --ignore-submodules HEAD 2>/dev/null)
local git_changed=$?
if [ "$git_changed" == 0 ]; then
git_ps1_style=$GREEN$git_branch;
else
git_ps1_style=$RED$git_branch;
fi
fi
echo -e "$git_ps1_style"
}
echo $(git_ps1_style)
以上是 获取git状态布尔没有缓慢的差异列表 的全部内容, 来源链接: utcz.com/qa/261243.html