获取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 --shortgit 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

回到顶部