我已使用
__git_ps1
更新了提示以包含分支名称。另外,我设置了GIT_PS1_SHOWCOLORHINTS
。
提示正确显示。然而,树枝的颜色始终是绿色的。我预计脏树枝会是红色的。
文档指出:
颜色基于“git status -sb”的彩色输出
我发现并审查了如何对 git-status 输出进行着色?但我不确定我需要更改哪些选项...
是否可以将clean分支的分支颜色更改为绿色,将dirty分支更改为红色?如果是的话,怎么办?
脏分支的
__git_ps1
显示的颜色不影响分支名称;它们影响“脏状态指示器”。除了启用颜色之外,如果启用此指示器,您将看到脏分支的红色星号:
old-prompt $ bash --noprofile --norc
bash-4.2$ source /etc/bash_completion.d/git-prompt
bash-4.2$ export GIT_PS1_SHOWCOLORHINTS=1
bash-4.2$ export GIT_PS1_SHOWDIRTYSTATE=1
bash-4.2$ export PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'
chris@machine:~/path/to/dir (master *)$
如果不修改
git-prompt.sh
代码或提供自己的函数,就无法根据脏状态更改分支名称的颜色。
请注意,这适用于
export PROMPT_COMMAND
,但不适用于 export PS1
。
我能够通过以下方式实现一个不错的解决方案:
1. 克隆最新的 git 源,获取并安装最新的
git-prompt.sh
(您的发行版可能已经有最新的脚本)__git_ps1
的调用以及一些格式选项来更改我的终端提示文本。
提交和文档,包括我所做的特定文件和编辑:https://github.com/karlapsite/git/commit/b34d9e8b690ec0b304eb794011938ab49be30204#diff-a43cc261eac6fbcc3578c94c2aa24713R449
现在,我的控制台拥有我想要的所有信息:我可以打开终端,然后 cd 进入任何 git 存储库:
$ cd ~/Github/git
user@hostname:~/Github/git:(master)$ # 'master' is green
当我签出哈希值并进入分离头状态时:
$ git checkout bca18110
user@hostname:~/Github/git:(bca1811...)$ # the commit hash is red
我需要遵循这个答案:https://stackoverflow.com/a/13997892/4717806让bash在每个命令后正确地重新解释颜色代码,但我的终端完好无损,换行仍然有效,并且我的提示符颜色是我想要的!
我解决这个问题的方法是编写一个简短的格式化函数,其中:
# Craft some nice coloured git status
__fancy_git_status() {
local STATUS COLOR NOTE GIT_PS
STATUS=$(git status -sb --ignore-submodules)
GIT_PS=$(if test $? -eq 0; then
if grep -q '^A' <<<"$STATUS"; then
COLOR=${COLOR_INTENSE_GREEN}
NOTE=" ${COLOR_YELLOW}staged 4 commit$COLOR"
elif grep -q '^ M' <<<"$STATUS"; then
COLOR="${COLOR_GREEN}"
NOTE=" ${COLOR_ORANGE}with changes$COLOR"
else
COLOR="${COLOR_INTENSE_GREEN}"
fi
__git_ps1 "${GIT_PS1_PREFIX}$COLOR⎇ %s${NOTE:-}"
fi)
test -n "$GIT_PS" && echo "$GIT_PS" || echo -e "${GIT_PS1_PREFIX}${COLOR_GRAY}not found"
}
PS1="..." # Your preferred PS1 preceding the git information
PS1+="\n"
PS1+="${COLOR_DARK_GREEN}\$(__fancy_git_status)\n${COLOR_RESET}"
PS1+="\\$ "
这是我的终端中带有干净分支的样子:
肮脏,但不上演:
暂存提交: