2014-10-23 2 views
1

Раньше у меня была блестящая подсказка Git в моем терминале, но после переустановки git через Homebrew теперь она просто показывает пустую скобку для имени ветки. В скобках отображается зеленый цвет, чтобы показать статус, как и раньше, но имя ветки отсутствует. Нужно ли мне что-то менять в моем .bash_profile? Это то, что она в настоящее время выглядит следующим образом:Потерянное Git приглашение после переустановки через Homebrew

# MacPorts Installer addition on 2012-05-23_at_10:37:44: adding an appropriate PATH variable for use with MacPorts. 
export PATH=/opt/local/bin:/opt/local/sbin:$PATH 
# Finished adapting your PATH environment variable for use with MacPorts. 

export PATH=/Applications/MAMP/bin/php/php5.4.10/bin:/usr/local/bin:/opt/local/bin:/opt/local/sbin:/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:$PATH 

# Added for MongoDB 
export MONGO_PATH=/usr/local/mongodb 
export PATH=$PATH:$MONGO_PATH/bin 

# Tell ls to be colourful 
export CLICOLOR=1 
export LSCOLORS=GxFxCxDxBxegedabagaced 

# Tell grep to highlight matches 
export GREP_OPTIONS='--color=auto' 

# Added for Git bash completion after I moved from macports to homebrew 
if [ -f $(brew --prefix)/etc/bash_completion ]; then 
. $(brew --prefix)/etc/bash_completion 
fi 

PS1="Desk /W# " 

# Set colour bash prompt according to git/svn branch 
. ~/.git_svn_bash_prompt 

# Added for Git autocomplete 
source ~/bin/git-completion.bash 
#PS1='[\[email protected]\h \w$(__git_ps1 " (%s)")]\$ ' 
PS1="\W\$(__git_ps1) \$ " 

# Homebrew 
export PATH="/usr/local/bin:$PATH" 

В ответ на предложения tripleee, вот это то, что в .git_svn_bash_prompt:

#!/bin/bash 
# 
# DESCRIPTION: 
# 
# Set the bash prompt according to: 
# * the branch/status of the current git repository 
# * the branch of the current subversion repository 
# * the return value of the previous command 
# 
# USAGE: 
# 
# 1. Save this file as ~/.git_svn_bash_prompt 
# 2. Add the following line to the end of your ~/.profile or ~/.bash_profile: 
#  . ~/.git_svn_bash_prompt 
# 
# AUTHOR: 
# 
# Scott Woods <[email protected]> 
# West Arete Computing 
# 
# Based on work by halbtuerke and lakiolen. 
# 
# http://gist.github.com/31967 


# The various escape codes that we can use to color our prompt. 
     RED="\[\033[0;31m\]" 
    YELLOW="\[\033[0;33m\]" 
     GREEN="\[\033[0;32m\]" 
     BLUE="\[\033[0;34m\]" 
    LIGHT_RED="\[\033[1;31m\]" 
LIGHT_GREEN="\[\033[1;32m\]" 
     WHITE="\[\033[1;37m\]" 
LIGHT_GRAY="\[\033[0;37m\]" 
COLOR_NONE="\[\e[0m\]" 

# Detect whether the current directory is a git repository. 
function is_git_repository { 
    git branch > /dev/null 2>&1 
} 

# Detect whether the current directory is a subversion repository. 
function is_svn_repository { 
    test -d .svn 
} 

# Determine the branch/state information for this git repository. 
function set_git_branch { 
    # Capture the output of the "git status" command. 
    git_status="$(git status 2> /dev/null)" 

    # Set color based on clean/staged/dirty. 
    if [[ ${git_status} =~ "working directory clean" ]]; then 
    state="${GREEN}" 
    elif [[ ${git_status} =~ "Changes to be committed" ]]; then 
    state="${YELLOW}" 
    else 
    state="${RED}" 
    fi 

    # Set arrow icon based on status against remote. 
    remote_pattern="# Your branch is (.*) of" 
    if [[ ${git_status} =~ ${remote_pattern} ]]; then 
    if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then 
     remote="↑" 
    else 
     remote="↓" 
    fi 
    else 
    remote="" 
    fi 
    diverge_pattern="# Your branch and (.*) have diverged" 
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then 
    remote="↕" 
    fi 

    # Get the name of the branch. 
    branch_pattern="^# On branch ([^${IFS}]*)"  
    if [[ ${git_status} =~ ${branch_pattern} ]]; then 
    branch=${BASH_REMATCH[1]} 
    fi 

    # Set the final branch string. 
    BRANCH="${state}(${branch})${remote}${COLOR_NONE} " 
} 

# Determine the branch information for this subversion repository. No support 
# for svn status, since that needs to hit the remote repository. 
function set_svn_branch { 
    # Capture the output of the "git status" command. 
    svn_info="$(svn info | egrep '^URL: ' 2> /dev/null)" 

    # Get the name of the branch. 
    branch_pattern="^URL: .*/(branches|tags)/([^/]+)" 
    trunk_pattern="^URL: .*/trunk(/.*)?$" 
    if [[ ${svn_info} =~ $branch_pattern ]]; then 
    branch=${BASH_REMATCH[2]} 
    elif [[ ${svn_info} =~ $trunk_pattern ]]; then 
    branch='trunk' 
    fi 

    # Set the final branch string. 
    BRANCH="(${branch}) " 
} 

# Return the prompt symbol to use, colorized based on the return value of the 
# previous command. 
function set_prompt_symbol() { 
    if test $1 -eq 0 ; then 
     PROMPT_SYMBOL="\$" 
    else 
     PROMPT_SYMBOL="${RED}\$${COLOR_NONE}" 
    fi 
} 

# Set the full bash prompt. 
function set_bash_prompt() { 
    # Set the PROMPT_SYMBOL variable. We do this first so we don't lose the 
    # return value of the last command. 
    set_prompt_symbol $? 

    # Set the BRANCH variable. 
    if is_git_repository ; then 
    set_git_branch 
    elif is_svn_repository ; then 
    set_svn_branch 
    else 
    BRANCH='' 
    fi 

    # Set the bash prompt variable. 
    PS1="\[email protected]\h \W ${BRANCH}${PROMPT_SYMBOL} " 
} 

# Tell bash to execute this function just before displaying its prompt. 
PROMPT_COMMAND=set_bash_prompt 

Я просто попытался закомментировать эту строку в .bash_profile

enter code here PS1 = "\ W \ $ (__ git_ps1) \ $"

Но, похоже, это не исправить. Я открываю новое окно терминала после сохранения изменений, надеюсь, что создаст новый сеанс bash. Извиняюсь за мое невежество, связанное с Башем!

+0

Вы, кажется, переопределяете значение 'PS1' строкой, которая, по-видимому, ожидает, что' __git_ps1' вернет информацию, которую вы говорите, что вам не хватает. Изменилось ли определение этой функции или скрипта? Где это определено? – tripleee

+0

С другой стороны, что находится в '.git_svn_bash_prompt' и вы переопределяете настройки, которые он устанавливает, изменяя' PS1' после его вызова? – tripleee

+0

Спасибо, тройной, хороший момент - к сожалению, удаление переопределенной строки не восстанавливает приглашение. –

ответ

0

В случае, если кому-то полезен, модернизация Git сломала Скотта Вуда в хорошем состоянии Git and SVN bash prompt script Я использовал. Читая комментарии для этого сценария, я обнаружил, что просто нужно изменить линию 84 в .git_svn_bash_prompt к

BRANCH="${state}($(git rev-parse --abbrev-ref HEAD))${remote}${COLOR_NONE} " 

, чтобы получить имя ветви обратно. Более подробную информацию см. В комментариях к Scott's Gist.

Смежные вопросы