我可以根据我所在的存储库有条件地激活 Git 提示吗?

Ant*_*ean 5 git bash .bash-profile git-bash

我正在使用内置的git prompt shell 脚本来改进我的 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
Run Code Online (Sandbox Code Playgroud)

我有这个庞大的企业应用程序存储库(成百上千个文件,一个非常深的目录树,.git目录几乎有 2 GB)。提示需要很长时间才能完成。

有没有办法告诉git-prompt.sh忽略这个工作区?无论是通过标志还是在我的.bashrc?

Ant*_*ean 4

Jubobs 的回答让我思考......我想测试大型存储库能够满足的某些条件。我不想将自己限制在一个存储库上。我需要它在这些存储库的所有子目录中工作。

我探索了git命令本身。它做了很多工作来在目录树中搜索文件夹.git。例如,如果您位于 git 存储库中,则此命令将退出 0,否则将退出非零。

$ git rev-parse --git-dir &>/dev/null
Run Code Online (Sandbox Code Playgroud)

这很整洁,但还不够。我想知道我是否在 git 存储库中并忽略了提示。但是,我不想组合复杂的条件。然后我考虑使用自定义 git config key。

$ git config --local prompt.ignore 1
Run Code Online (Sandbox Code Playgroud)

我可以运行这个测试来看看它是否非空。我应该弄清楚如何测试 0 或空与非空,但这是一个开始。

$ [[ -z $(git config prompt.ignore) ]]
Run Code Online (Sandbox Code Playgroud)

它具有所有功能中最好的功能。我可以将其添加到任何存储库中。它参与“这是一个 git 存储库吗?” 发现并回答提示忽略问题,一切合二为一!

我把它烤成我.bashrc喜欢的样子

function __my_ps1 {
  if [[ -z $(git config prompt.ignore) ]];
  then
    __git_ps1 "$PROMPT_PRE" "$PROMPT_POST"
  fi
}

export PROMPT_COMMAND=__my_ps1
Run Code Online (Sandbox Code Playgroud)

我正在使用 Git for Windows 包中的 Git Bash 提示符,它已经有一个非常友好的提示符了。我想知道是否需要else在任何其他 shell 中为该提示命令提供一个分支。