Git 带有符号的分支标签出现在我的命令行上

Git branch labels with symbols appearing on my command line

我最近在我的 ubuntu 环境中安装了各种程序(homestead、vag运行t、virtualbox)。其中一个程序导致我的命令行开始显示 git 的当前 b运行ch 以及与 git 状态相关的神秘符号。它们看起来像这样:

vagrant@homestead ~/Code/myapp (staging *<) $ cd home

你可以看到它的地方是 "staging" b运行ch。 “*<”与 git 状态有关。

这是另一个例子:

vagrant@homestead ~/Code/myapp (master=) $ cd ..

在这种情况下,我在 "master" b运行ch 上,“=”指的是 git 状态。

虽然我认为它很简洁,但不幸的是 git 也大大降低了我的命令行速度。因此,我想找出是什么导致 git 发生这种变化(它以前不是这样的)并尝试撤消这些功能。我知道 git 是速度变慢的原因,因为在我没有 git 的应用程序中,一切都运行顺畅。我还 运行 "top" 并注意到 git 是唯一的东西 运行 当我的系统挂起时,占用了 33% 到 50% 的某些资源。

我认为更新到 git 的较新版本会有所帮助,但它没有做出任何改变。目前我是 运行 git 版本 2.7.1.

以下程序之一可能与此有关:drush、ruby 或 compass。不幸的是,我无法通过这种方式隔离出哪个程序可能影响了 git,并且它可能是一个完全不同的程序,我不记得安装了。

检查您的 $PS1$PROMPT_COMMAND 变量:它可能引用一个昂贵的 ps1 函数,该函数计算您所在的 git 存储库的状态。
例如参见“git bash slow”(对于基于 Windows Linux 的 shell,但同样适用于 Linux)

检查导出 PS1='$'(仅用于测试)是否加快速度:这至少会确认问题。

OP adds :

The issue does seem to be proportional to how large the git repository is, because I created a new directory with just 1 file in it, and git is working lightning fast in every way.

I discovered these git symbols/branch label are appearing on my command line due to this variable: PROMPT_COMMAND but I am still trying to trace down which file is generating it.
When I ran this on the command line, it made everything work at light speed again: export PROMPT_COMMAND="echo -n [$(date +%k:%m:%S)]"

您有enables/disables根据文件夹提示的脚本,以避免某些文件夹有大文件和性能成本。
查看项目“jhrcz/git-prompt-autoenable" and its documentation:

PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\$ "'

安装 "drush" 导致命令行发生变化。你会注意到 "drush" 安装完成后,它会提到它在你的 .bashrc 文件中添加了一些行,包括这一行:

# Include Drush prompt customizations.
if [ -f "/home/vagrant/.drush/drush.prompt.sh" ] ; then
  source /home/vagrant/.drush/drush.prompt.sh
fi

如果您打开它引用的文件 (/home/vagrant/.drush/drush.prompt.sh),您会看到 PROMPT_COMMAND 和 PS1 正在修改中。

与其完全删除或覆盖 drush。prompt.sh,不如对其进行修改以免丢失 drush 命令行定制。但是,要完全覆盖它,您可以在 .bashrc 文件中添加如下内容。位于您的 ~ 目录中的 .bashrc 文件将仅修改您的配置文件。这是一个显示一些不错的信息和运行速度更快的 git 状态的示例:

TZ='America/Chicago'; export TZ
export PROMPT_COMMAND="echo -n [$(date +%r)]"; 
export PS1='\[\e]0;\w\a\] \[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\] $((git symbolic-ref -q HEAD || git rev-parse -q --short $

您可能不需要TZ线,也可以相应调整。

这是另一个不错的选择:

function mycp {
    EXITSTATUS="$?"
    YELLOW="$(tput setaf 3)"
    RED="\[3[0;31m\]"
    GREEN="\[\e[0;32m\]"
    BLUE="\[\e[34m\]"
    OFF="\[3[m\]"
    HOST="\h"
    USER="\u"
    DIR="\w"
    NEWLINE="\n"
    DATE="\d"
    TIME="\T"
    BRANCH="`git branch 2> /dev/null | grep -e ^* | sed -E  s/^\\\*\ \(.+\)$/\(\\\)\ /`"

    PROMPT="\[3]0;${USER}@${HOST}: \w[=12=]7\n${YELLOW}${TIME} ${DATE} ${GREEN}${USER}@${HOST} ${RED}${BRANCH}"

    if [ "${EXITSTATUS}" -eq 0 ]
    then
        PS1="${PROMPT} ${BLUE}[${GREEN}${EXITSTATUS}${BLUE}]${OFF}\n${GREEN}\w $${OFF}   "
    else
        PS1="${PROMPT} ${BLUE}[${GREEN}${EXITSTATUS}${BLUE}]${OFF}\n${GREEN}\w $${OFF}   "
    fi
}
PROMPT_COMMAND=mycp