写这篇的背景是当前很多shell都会有git prompt脚本,即对当前git仓库分支、改动情况的提示。
git分支命令的执行通常不会占用太多时间,但是改动情况的命令如git status
或者简短版本的git status --porcelain
则不然,特别是当仓库项目很大时,当你有以下我的使用场景时则更为糟糕。目前我个人的开发环境是windows+wsl,习惯上我会在win上通过git for windows的版本clone代码,然后在wsl里访问编辑,在这种场景下你会发现在wsl中的git status命令执行时间更长(这里我没深究其原因),特别是当你每敲一行命令shell都会去执行git status
就更加恼人。
以下为个人的折腾记录,“可能”会不断更新不同shell的情况:
fish
当前我用的是fish,那么先折腾下fish:
fish_git_prompt
该函数是fish用于展示git目录状态的函数,官方介绍见这里。默认脚本在/usr/share/fish/functions/fish_git_prompt.fish,我们的目的只是要禁用git status,那么找到相关代码:
1 | function __fish_git_prompt_informative_status |
相关脚本都在上面了,逻辑是当前如果是git目录,并且informative
为true
时才去使用git status
,informative
会根据git config --bool bash.showInformativeStatus
配置来,那么简单了,直接在git配置中把该配置禁用即可:
1 | git config bash.showInformativeStatus false |
使用何种级别的config
那就看个人需求了。
fish_right_prompt
上面这个fish_git_prompt的issue可以在fish的github上翻到,fish_right_prompt这个就比较难找了,fish_right_prompt是作为右边提示的函数存在(见官网),fish的默认包里并没有这个函数的实现,但是如果你用了oh-my-fish这类主题工具,那么其脚本里可能会包含git status调用,如theme default中的~/.config/fish/functions/fish_right_prompt.fish 脚本:
1 | function fish_right_prompt |
尴尬的发现没有任何判断,直接执行了git status,那我的解决方法也比较简单暴力,我不需要这个右提示符fish_right_prompt.fish:
1 | function fish_right_prompt |
config.fish:
1 | set -g fish_no_right_prompt "true" |
当然直接改这个主题的脚本比较有问题,暂时先按照这个方式解决了。