我正在使用内置的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

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

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

#1楼 票数: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分支。

#2楼 票数:3

定义条件Git提示

看看git-prompt.sh建议的Bash提示符定义(但是没有用户和主机,因为它们占用了太多空间,并且对你的问题不敏感):

PS1='[\W$(__git_ps1 " (%s)")]\$ '

没有什么可以阻止您在命令替换中插入测试,如下所示:

PS1='[\W$(if true; then __git_ps1 " (%s)"; fi)]\$ '

虽然这个例子很傻。 使用这个想法,你可以定义一个条件Git提示,这样,

  • 如果你在违规仓库的工作树之外 ,Git提示被激活,并且
  • 如果你有问题的回购里面 ,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!

#3楼 票数:1

内置的git prompt shell脚本具有可以设置的每个存储库选项以加快提示。

bash.showDirtyState设置为false禁用检查更改

$ git config --local --add bash.showDirtyState false

bash.showUntrackedFiles设置为false停止检查未跟踪的文件

$ git config --local --add bash.showUntrackedFiles false

bash.showUpstream设置为空字符串以停止将HEAD与其上游进行比较

$ git config --local --add bash.showUpstream ''

  ask by Anthony Mastrean translate from so

未解决问题?本站智能推荐:

2回复

Git .bash_profile 无法使用右键单击

每当我右键单击文件夹并单击 Git Bash 时,我的 .bash_profile 都不起作用。 当我用桌面图标打开 Git Bash 时,它工作得很好。 这是我的 .bash_profile: 我尝试搜索,但到目前为止我没有看到一些答案或至少提示来回答我的问题。 顺便说一句,我从 udaci
1回复

通过Homebrew重新安装后丢失了Git提示

我以前在终端上有出色的Git提示符,但是通过Homebrew重新安装git之后,现在只显示了分支名称的空括号。 括号显示为绿色,以显示以前的状态,但是缺少分支名称。 我是否需要更改.bash_profile中的任何内容? 这是当前的样子: 为了回应三方的建议,以下是.git_svn
1回复

我需要手动获取〜/ .bashrc来在命令提示符下显示和更新GIT分支

当我登录到我的CentOS服务器时,我的~/.bashrc文件已被获取。 这很明显是因为1.)我在~/.bash_profile有一个logger "sourcing ~/.bashrc"消息,并且在/var/log/messages看到了该/var/log/messages ; 和2.)我
1回复

安装git后出现Shell错误和提示中不需要的“ master”

我安装了Git,现在打开终端时,我得到以下信息: 我找到了此解决方案并尝试了以下方法 没有(master #)了,但是当我重新启动shell时(master #)再次显示。 我如何永久摆脱主人?
1回复

向我的Bash配置文件添加git-prompt破坏了我的Bash提示符pyenv / pyenv-virtualenv版本指示器。 如何恢复pyenv提示?

当我设置pyenv + pyenv-virtualenv时 ,他们似乎自动将当前的python版本名称或pyvenv / virtualenv名称添加到了命令提示符下。 很棒,非常有用 我将git-completion.bash和git-prompt.sh添加到了〜/ .bash_pr
1回复

除了系统内置版本以外,如何使用本地安装的git?

我有自制软件安装git。 我想使用本地安装的git而不是bash中内置版本的系统。 Brew已经创建了指向它安装在/ usr / local / bin中的git包的符号链接。 我应该如何编辑.bash_profile,以便可以使用除内置的一个系统以外安装的brew版本?
1回复

添加.bash_profile的git别名不起作用

我编辑了我的$ Home .bash_profile以包含一些git别名命令。 我对此很陌生,我无法弄清楚出了什么问题。 .bash_profile中 我似乎无法理解我做错了什么。 有任何想法吗? [编辑]只是想提一下我添加的部分来自PS1。 例如alias ll =
2回复

在git命令行中显示合并状态的方法

我目前有git配置为使用以下bash脚本显示我所在的分支(以及我的命令行以显示我所在的目录): 我想知道是否有一种方法来显示“合并”状态,所以当我合并它时也说在命令行中merging (在我之后的分支之后)。 我在其他地方看过这个,所以我很确定它是可能的,但不知道如何。