我最近在我的ubuntu环境中安装了各种程序(宅基地,流浪汉,虚拟机)。其中一个程序导致我的命令行开始显示git的当前分支以及与git状态相关的神秘符号。它们看起来像这样:
vagrant@homestead ~/Code/myapp (staging *<) $ cd home
你可以看到它是&#34; staging&#34;科。 &#34; *&lt;&#34;与git状态有关。
这是另一个例子:
vagrant@homestead ~/Code/myapp (master=) $ cd ..
在这种情况下,我在&#34;主人&#34;分支和&#34; =&#34;指的是git状态。
虽然我觉得它很整洁,但不幸的是git也大大减慢了我的命令行。因此,我想找出导致git更改的原因(它没有使用这样的行为)并尝试撤消功能。我知道git是减速的原因,因为在我的应用程序中没有git,一切都在游泳。我也跑了#34; top&#34;并注意到git是我的系统挂起时唯一运行的东西,占用了33%到50%的某些资源。
我认为更新到更新版本的git会有所帮助,但它没有做任何改动。目前我正在运行git版本2.7.1。
以下程序之一可能与此有关:drush,ruby或指南针。不幸的是,我无法通过这种方式隔离哪个程序可能会影响git,并且它可能完全是一个不同的程序,我无法记住安装。
答案 0 :(得分:3)
检查您的$PS1
或$PROMPT_COMMAND
变量:它可能指的是昂贵的ps1函数,它会计算您所在的git repo的状态。
例如,参见&#34; git bash slow&#34; (对于基于Windows Linux的shell,但同样适用于Linux)
检查导出PS1 =&#39; $&#39; (仅用于测试)加快速度:至少可以确认问题。
这个问题似乎与git存储库的大小成正比,因为我创建了一个只包含1个文件的新目录,并且git在各方面都闪电般快速。
我发现这些git符号/分支标签出现在我的命令行中,因为这个变量:
PROMPT_COMMAND
但我仍在尝试追踪生成它的文件。
当我在命令行上运行它时,它使所有内容再次以光速运行:export PROMPT_COMMAND="echo -n [$(date +%k:%m:%S)]"
您有脚本根据文件夹启用/禁用提示,以避免某些文件夹包含大文件和性能成本。
查看项目&#34; jhrcz/git-prompt-autoenable
&#34;和its documentation:
PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'
答案 1 :(得分:1)
安装“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="\[\033[0;31m\]"
GREEN="\[\e[0;32m\]"
BLUE="\[\e[34m\]"
OFF="\[\033[m\]"
HOST="\h"
USER="\u"
DIR="\w"
NEWLINE="\n"
DATE="\d"
TIME="\T"
BRANCH="`git branch 2> /dev/null | grep -e ^* | sed -E s/^\\\\\*\ \(.+\)$/\(\\\\\1\)\ /`"
PROMPT="\[\033]0;${USER}@${HOST}: \w\007\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