我的终端有如下输出。
pc@pop-os:~/my-project (main)$
该项目是通过 GitHub 下载的。(main)
颜色为绿色。我将其设置为当我转到项目目录时出现在终端上的分支名称。当我进行更改时,我希望终端能够识别更改并将颜色更改(main)
为红色。请问有人可以帮忙吗?
答案1
我使用该parseGitBranch
函数来定义颜色。你的函数应该是这样的:
parseGitBranch () {
if ! git rev-parse --git-dir &> /dev/null; then
return
fi
branch="($(git branch --show-current))"
local STATUS
STATUS=$(git status --porcelain)
if [ -n "$STATUS" ]; then
echo -e "\033[38;5;1m $branch" #red
else
echo -e "\033[38;5;34m $branch" #green
fi
}
并且您应该设置PS1
为:
PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\$(parseGitBranch) \[\033[00m\]\$\n>"
上面的代码可以在里面~/.bashrc
。
解释
以下行将检查当前目录是否是git项目:
if ! git rev-parse --git-dir &> /dev/null; then
return
fi
我已将您的代码更改git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
为git branch --show-current
.这是获取当前分支名称的更简单方法。
现在,如果上述条件成立,则该函数将检查当前 git 目录的状态。
了解项目中是否有更改的最有效方法是使用git status --porcelain
.因此,如果您没有任何更改,则输出git status --porcelain
将为空。检查-n "$STATUS"
STATUS 的长度是否非零。
如果-n $STATUS
为 true,则分支颜色将为红色(因为您进行了更改):echo -e "\033[38;5;1m $branch" #red
。
如果为 false,则分支颜色将为绿色:echo -e "\033[38;5;34m $branch" #green
。
你可以检查这个链接有关 bash 颜色和格式的更多信息。也许您的终端不支持某些格式或颜色无法正确打印。