我使用内置的git prompt shell script来改善我的Bash提示。
. ~/git-completion.bash
. ~/git-prompt.sh
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWUNTRACKEDFILES=1
export GIT_PS1_SHOWUPSTREAM="auto"
export GIT_PS1_SHOWCOLORHINTS=1
我有一个巨大的企业应用程序存储库(数以千计的文件,一个非常深的目录树,.git
目录几乎是2 GB)。提示需要很长时间才能完成。
有没有办法告诉git-prompt.sh
忽略这个工作区?是通过旗帜还是我的.bashrc
?
答案 0 :(得分:4)
Jubobs的回答让我思考......我想测试一下大型存储库满足的条件。我不想将自己限制在一个存储库中。我需要这个在这些回购的所有子目录中工作。
我探索了git
命令本身。它在目录树中搜索.git
文件夹做了大量工作。例如,如果您在git repo中,则此命令将退出0,否则返回非零。
$ git rev-parse --git-dir &>/dev/null
这很整洁,但还不够。我想知道我是否在使用git repo而忽略了提示。但是,我不想结合复杂的条件。然后我考虑使用自定义git配置密钥。
$ git config --local prompt.ignore 1
我可以运行此测试以查看它是否为非空。我应该弄清楚如何测试0或空与非空,但这是一个开始。
$ [[ -z $(git config prompt.ignore) ]]
这具有最好的功能。我可以将它添加到任何回购。它参与“这是一个git回购吗?”发现并回答提示忽略问题,一个一个!
我将其烘焙到我的.bashrc
中,就像这样
function __my_ps1 {
if [[ -z $(git config prompt.ignore) ]];
then
__git_ps1 "$PROMPT_PRE" "$PROMPT_POST"
fi
}
export PROMPT_COMMAND=__my_ps1
我正在使用Git for Windows软件包中的Git Bash提示,它已经提供了非常友好的提示。我想知道是否需要在任何其他shell中为该提示命令提供else
分支。
答案 1 :(得分:3)
在git-prompt.sh
中查看建议的Bash提示定义(但没有用户和主机,因为它们占用了太多空间,并且对您的问题不敏感):
PS1='[\W$(__git_ps1 " (%s)")]\$ '
没有什么可以阻止您在命令替换中插入测试,如下所示:
PS1='[\W$(if true; then __git_ps1 " (%s)"; fi)]\$ '
虽然这个例子很傻。使用这个想法,您可以定义一个条件Git提示符,
以下Bash提示定义完全相同:
export PS1='[\W$(if [[ ! $PWD/ = $OFFENDINGDIR/* ]]; then __git_ps1 " (%s)"; fi)]\$ '
其中OFFENDINGDIR
是一个必须赋予违规仓库根目录路径的变量。
假设~/projectA
是违规回购。有关信息,这是我的默认提示定义:
PS1='\W\$ '
很简单;没有Git提示。现在,让我们cd
到有问题的存储库:
~$ cd projectA
# Let's check that we are indeed in a Git repo:
projectA$ git branch
* master
# Now let's set up our conditional Git prompt:
projectA$ export OFFENDINGDIR=$PWD
projectA$ export PS1='[\W$(if [[ ! $PWD/ = $OFFENDINGDIR/* ]]; then __git_ps1 " (%s)"; fi)]\$ '
# Our Bash prompt changes accordingly...
[projectA]$
# ... but notice that it contains no branch info (as desired).
# However, if we cd to another repo...
[projectA]$ cd ../projectB
[projectB (master)] $
# ... the Git prompt is there, as desired!
答案 2 :(得分:1)
内置git提示符shell脚本具有每个存储库选项,您可以设置这些选项来加快提示符。
将bash.showDirtyState
设置为false
到disable checking for changes:
$ git config --local --add bash.showDirtyState false
将bash.showUntrackedFiles
设置为false
到stop checking for untracked files:
$ git config --local --add bash.showUntrackedFiles false
将bash.showUpstream
设置为stop comparing HEAD with its upstream的空字符串:
$ git config --local --add bash.showUpstream ''